/*
	Copyright (c) 2004-2008, The Dojo Foundation
	All Rights Reserved.

	Licensed under the Academic Free License version 2.1 or above OR the
	modified BSD license. For more information on Dojo licensing, see:

		http://dojotoolkit.org/book/dojo-book-0-9/introduction/licensing
*/

/*
	This is a compiled version of Dojo, built for deployment and not for
	development. To get an editable version, please visit:

		http://dojotoolkit.org

	for documentation and information on getting the source.
*/


(function () {
	var sMap = null;
	if ((sMap || (typeof djConfig != "undefined" && djConfig.scopeMap)) && (typeof window != "undefined")) {
		var scopeDef = "", scopePrefix = "", scopeSuffix = "", scopeMap = {}, scopeMapRev = {};
		sMap = sMap || djConfig.scopeMap;
		for (var i = 0; i < sMap.length; i++) {
			var newScope = sMap[i];
			scopeDef += "var " + newScope[0] + " = {}; " + newScope[1] + " = " + newScope[0] + ";" + newScope[1] + "._scopeName = '" + newScope[1] + "';";
			scopePrefix += (i == 0 ? "" : ",") + newScope[0];
			scopeSuffix += (i == 0 ? "" : ",") + newScope[1];
			scopeMap[newScope[0]] = newScope[1];
			scopeMapRev[newScope[1]] = newScope[0];
		}
		eval(scopeDef + "dojo._scopeArgs = [" + scopeSuffix + "];");
		dojo._scopePrefixArgs = scopePrefix;
		dojo._scopePrefix = "(function(" + scopePrefix + "){";
		dojo._scopeSuffix = "})(" + scopeSuffix + ")";
		dojo._scopeMap = scopeMap;
		dojo._scopeMapRev = scopeMapRev;
	}
	(function () {
		if (!this["console"]) {
			this.console = {log:function () {
			}};
		}
		var cn = ["assert", "count", "debug", "dir", "dirxml", "error", "group", "groupEnd", "info", "profile", "profileEnd", "time", "timeEnd", "trace", "warn", "log"];
		var i = 0, tn;
		while ((tn = cn[i++])) {
			if (!console[tn]) {
				(function () {
					var tcn = tn + "";
					console[tcn] = function () {
						var a = Array.apply({}, arguments);
						a.unshift(tcn + ":");
						console.log(a.join(" "));
					};
				})();
			}
		}
		if (typeof dojo == "undefined") {
			this.dojo = {_scopeName:"dojo", _scopePrefix:"", _scopePrefixArgs:"", _scopeSuffix:"", _scopeMap:{}, _scopeMapRev:{}};
		}
		var d = dojo;
		if (typeof dijit == "undefined") {
			this.dijit = {_scopeName:"dijit"};
		}
		if (typeof dojox == "undefined") {
			this.dojox = {_scopeName:"dojox"};
		}
		if (!d._scopeArgs) {
			d._scopeArgs = [dojo, dijit, dojox];
		}
		d.global = this;
		d.config = {isDebug:false, debugAtAllCosts:false};
		if (typeof djConfig != "undefined") {
			for (var opt in djConfig) {
				d.config[opt] = djConfig[opt];
			}
		}
		var _platforms = ["Browser", "Rhino", "Spidermonkey", "Mobile"];
		var t;
		while ((t = _platforms.shift())) {
			d["is" + t] = false;
		}
		dojo.locale = d.config.locale;
		var rev = "$Rev: 13231 $".match(/\d+/);
		dojo.version = {major:0, minor:0, patch:0, flag:"dev", revision:rev ? +rev[0] : 999999, toString:function () {
			with (d.version) {
				return major + "." + minor + "." + patch + flag + " (" + revision + ")";
			}
		}};
		if (typeof OpenAjax != "undefined") {
			OpenAjax.hub.registerLibrary(dojo._scopeName, "http://dojotoolkit.org", d.version.toString());
		}
		dojo._mixin = function (obj, props) {
			var tobj = {};
			for (var x in props) {
				if (tobj[x] === undefined || tobj[x] != props[x]) {
					obj[x] = props[x];
				}
			}
			if (d["isIE"] && props) {
				var p = props.toString;
				if (typeof p == "function" && p != obj.toString && p != tobj.toString && p != "\nfunction toString() {\n	[native code]\n}\n") {
					obj.toString = props.toString;
				}
			}
			return obj;
		};
		dojo.mixin = function (obj, props) {
			for (var i = 1, l = arguments.length; i < l; i++) {
				d._mixin(obj, arguments[i]);
			}
			return obj;
		};
		dojo._getProp = function (parts, create, context) {
			var obj = context || d.global;
			for (var i = 0, p; obj && (p = parts[i]); i++) {
				if (i == 0 && this._scopeMap[p]) {
					p = this._scopeMap[p];
				}
				obj = (p in obj ? obj[p] : (create ? obj[p] = {} : undefined));
			}
			return obj;
		};
		dojo.setObject = function (name, value, context) {
			var parts = name.split("."), p = parts.pop(), obj = d._getProp(parts, true, context);
			return obj && p ? (obj[p] = value) : undefined;
		};
		dojo.getObject = function (name, create, context) {
			return d._getProp(name.split("."), create, context);
		};
		dojo.exists = function (name, obj) {
			return !!d.getObject(name, false, obj);
		};
		dojo["eval"] = function (scriptFragment) {
			return d.global.eval ? d.global.eval(scriptFragment) : eval(scriptFragment);
		};
		d.deprecated = d.experimental = function () {
		};
	})();
	(function () {
		var d = dojo;
		d.mixin(d, {_loadedModules:{}, _inFlightCount:0, _hasResource:{}, _modulePrefixes:{dojo:{name:"dojo", value:"."}, doh:{name:"doh", value:"../util/doh"}, tests:{name:"tests", value:"tests"}}, _moduleHasPrefix:function (module) {
			var mp = this._modulePrefixes;
			return !!(mp[module] && mp[module].value);
		}, _getModulePrefix:function (module) {
			var mp = this._modulePrefixes;
			if (this._moduleHasPrefix(module)) {
				return mp[module].value;
			}
			return module;
		}, _loadedUrls:[], _postLoad:false, _loaders:[], _unloaders:[], _loadNotifying:false});
		dojo._loadPath = function (relpath, module, cb) {
			var uri = ((relpath.charAt(0) == "/" || relpath.match(/^\w+:/)) ? "" : this.baseUrl) + relpath;
			try {
				return !module ? this._loadUri(uri, cb) : this._loadUriAndCheck(uri, module, cb);
			}
			catch (e) {
				console.error(e);
				return false;
			}
		};
		dojo._loadUri = function (uri, cb) {
			if (this._loadedUrls[uri]) {
				return true;
			}
			var contents = this._getText(uri, true);
			if (!contents) {
				return false;
			}
			this._loadedUrls[uri] = true;
			this._loadedUrls.push(uri);
			if (cb) {
				contents = "(" + contents + ")";
			} else {
				contents = this._scopePrefix + contents + this._scopeSuffix;
			}
			if (d.isMoz) {
				contents += "\r\n//@ sourceURL=" + uri;
			}
			var value = d["eval"](contents);
			if (cb) {
				cb(value);
			}
			return true;
		};
		dojo._loadUriAndCheck = function (uri, moduleName, cb) {
			var ok = false;
			try {
				ok = this._loadUri(uri, cb);
			}
			catch (e) {
				console.error("failed loading " + uri + " with error: " + e);
			}
			return !!(ok && this._loadedModules[moduleName]);
		};
		dojo.loaded = function () {
			this._loadNotifying = true;
			this._postLoad = true;
			var mll = d._loaders;
			this._loaders = [];
			for (var x = 0; x < mll.length; x++) {
				try {
					mll[x]();
				}
				catch (e) {
					throw e;
					console.error("dojo.addOnLoad callback failed: " + e, e);
				}
			}
			this._loadNotifying = false;
			if (d._postLoad && d._inFlightCount == 0 && mll.length) {
				d._callLoaded();
			}
		};
		dojo.unloaded = function () {
			var mll = this._unloaders;
			while (mll.length) {
				(mll.pop())();
			}
		};
		var onto = function (arr, obj, fn) {
			if (!fn) {
				arr.push(obj);
			} else {
				if (fn) {
					var func = (typeof fn == "string") ? obj[fn] : fn;
					arr.push(function () {
						func.call(obj);
					});
				}
			}
		};
		dojo.addOnLoad = function (obj, functionName) {
			onto(d._loaders, obj, functionName);
			if (d._postLoad && d._inFlightCount == 0 && !d._loadNotifying) {
				d._callLoaded();
			}
		};
		dojo.addOnUnload = function (obj, functionName) {
			onto(d._unloaders, obj, functionName);
		};
		dojo._modulesLoaded = function () {
			if (d._postLoad) {
				return;
			}
			if (d._inFlightCount > 0) {
				console.warn("files still in flight!");
				return;
			}
			d._callLoaded();
		};
		dojo._callLoaded = function () {
			if (typeof setTimeout == "object" || (dojo.config.useXDomain && d.isOpera)) {
				if (dojo.isAIR) {
					setTimeout(function () {
						dojo.loaded();
					}, 0);
				} else {
					setTimeout(dojo._scopeName + ".loaded();", 0);
				}
			} else {
				d.loaded();
			}
		};
		dojo._getModuleSymbols = function (modulename) {
			var syms = modulename.split(".");
			for (var i = syms.length; i > 0; i--) {
				var parentModule = syms.slice(0, i).join(".");
				if ((i == 1) && !this._moduleHasPrefix(parentModule)) {
					syms[0] = "../" + syms[0];
				} else {
					var parentModulePath = this._getModulePrefix(parentModule);
					if (parentModulePath != parentModule) {
						syms.splice(0, i, parentModulePath);
						break;
					}
				}
			}
			return syms;
		};
		dojo._global_omit_module_check = false;
		dojo._loadModule = dojo.require = function (moduleName, omitModuleCheck) {
			omitModuleCheck = this._global_omit_module_check || omitModuleCheck;
			var module = this._loadedModules[moduleName];
			if (module) {
				return module;
			}
			var relpath = this._getModuleSymbols(moduleName).join("/") + ".js";
			var modArg = (!omitModuleCheck) ? moduleName : null;
			var ok = this._loadPath(relpath, modArg);
			if (!ok && !omitModuleCheck) {
				throw new Error("Could not load '" + moduleName + "'; last tried '" + relpath + "'");
			}
			if (!omitModuleCheck && !this._isXDomain) {
				module = this._loadedModules[moduleName];
				if (!module) {
					throw new Error("symbol '" + moduleName + "' is not defined after loading '" + relpath + "'");
				}
			}
			return module;
		};
		dojo.provide = function (resourceName) {
			resourceName = resourceName + "";
			return (d._loadedModules[resourceName] = d.getObject(resourceName, true));
		};
		dojo.platformRequire = function (modMap) {
			var common = modMap.common || [];
			var result = common.concat(modMap[d._name] || modMap["default"] || []);
			for (var x = 0; x < result.length; x++) {
				var curr = result[x];
				if (curr.constructor == Array) {
					d._loadModule.apply(d, curr);
				} else {
					d._loadModule(curr);
				}
			}
		};
		dojo.requireIf = function (condition, resourceName) {
			if (condition === true) {
				var args = [];
				for (var i = 1; i < arguments.length; i++) {
					args.push(arguments[i]);
				}
				d.require.apply(d, args);
			}
		};
		dojo.requireAfterIf = d.requireIf;
		dojo.registerModulePath = function (module, prefix) {
			d._modulePrefixes[module] = {name:module, value:prefix};
		};
		dojo.requireLocalization = function (moduleName, bundleName, locale, availableFlatLocales) {
			d.require("dojo.i18n");
			d.i18n._requireLocalization.apply(d.hostenv, arguments);
		};
		var ore = new RegExp("^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$");
		var ire = new RegExp("^((([^:]+:)?([^@]+))@)?([^:]*)(:([0-9]+))?$");
		dojo._Url = function () {
			var n = null;
			var _a = arguments;
			var uri = [_a[0]];
			for (var i = 1; i < _a.length; i++) {
				if (!_a[i]) {
					continue;
				}
				var relobj = new d._Url(_a[i] + "");
				var uriobj = new d._Url(uri[0] + "");
				if (relobj.path == "" && !relobj.scheme && !relobj.authority && !relobj.query) {
					if (relobj.fragment != n) {
						uriobj.fragment = relobj.fragment;
					}
					relobj = uriobj;
				} else {
					if (!relobj.scheme) {
						relobj.scheme = uriobj.scheme;
						if (!relobj.authority) {
							relobj.authority = uriobj.authority;
							if (relobj.path.charAt(0) != "/") {
								var path = uriobj.path.substring(0, uriobj.path.lastIndexOf("/") + 1) + relobj.path;
								var segs = path.split("/");
								for (var j = 0; j < segs.length; j++) {
									if (segs[j] == ".") {
										if (j == segs.length - 1) {
											segs[j] = "";
										} else {
											segs.splice(j, 1);
											j--;
										}
									} else {
										if (j > 0 && !(j == 1 && segs[0] == "") && segs[j] == ".." && segs[j - 1] != "..") {
											if (j == (segs.length - 1)) {
												segs.splice(j, 1);
												segs[j - 1] = "";
											} else {
												segs.splice(j - 1, 2);
												j -= 2;
											}
										}
									}
								}
								relobj.path = segs.join("/");
							}
						}
					}
				}
				uri = [];
				if (relobj.scheme) {
					uri.push(relobj.scheme, ":");
				}
				if (relobj.authority) {
					uri.push("//", relobj.authority);
				}
				uri.push(relobj.path);
				if (relobj.query) {
					uri.push("?", relobj.query);
				}
				if (relobj.fragment) {
					uri.push("#", relobj.fragment);
				}
			}
			this.uri = uri.join("");
			var r = this.uri.match(ore);
			this.scheme = r[2] || (r[1] ? "" : n);
			this.authority = r[4] || (r[3] ? "" : n);
			this.path = r[5];
			this.query = r[7] || (r[6] ? "" : n);
			this.fragment = r[9] || (r[8] ? "" : n);
			if (this.authority != n) {
				r = this.authority.match(ire);
				this.user = r[3] || n;
				this.password = r[4] || n;
				this.host = r[5];
				this.port = r[7] || n;
			}
		};
		dojo._Url.prototype.toString = function () {
			return this.uri;
		};
		dojo.moduleUrl = function (module, url) {
			var loc = d._getModuleSymbols(module).join("/");
			if (!loc) {
				return null;
			}
			if (loc.lastIndexOf("/") != loc.length - 1) {
				loc += "/";
			}
			var colonIndex = loc.indexOf(":");
			if (loc.charAt(0) != "/" && (colonIndex == -1 || colonIndex > loc.indexOf("/"))) {
				loc = d.baseUrl + loc;
			}
			return new d._Url(loc, url);
		};
	})();
	if (typeof window != "undefined") {
		dojo.isBrowser = true;
		dojo._name = "browser";
		(function () {
			var d = dojo;
			if (document && document.getElementsByTagName) {
				var scripts = document.getElementsByTagName("script");
				var rePkg = /dojo(\.xd)?\.js(\W|$)/i;
				for (var i = 0; i < scripts.length; i++) {
					var src = scripts[i].getAttribute("src");
					if (!src) {
						continue;
					}
					var m = src.match(rePkg);
					if (m) {
						if (!d.config.baseUrl) {
							d.config.baseUrl = src.substring(0, m.index);
						}
						var cfg = scripts[i].getAttribute("djConfig");
						if (cfg) {
							var cfgo = eval("({ " + cfg + " })");
							for (var x in cfgo) {
								dojo.config[x] = cfgo[x];
							}
						}
						break;
					}
				}
			}
			d.baseUrl = d.config.baseUrl;
			var n = navigator;
			var dua = n.userAgent;
			var dav = n.appVersion;
			var tv = parseFloat(dav);
			d.isOpera = (dua.indexOf("Opera") >= 0) ? tv : 0;
			var idx = Math.max(dav.indexOf("WebKit"), dav.indexOf("Safari"), 0);
			if (idx) {
				d.isSafari = parseFloat(dav.split("Version/")[1]) || ((parseFloat(dav.substr(idx + 7)) >= 419.3) ? 3 : 2) || 2;
			}
			d.isAIR = (dua.indexOf("AdobeAIR") >= 0) ? 1 : 0;
			d.isKhtml = (dav.indexOf("Konqueror") >= 0 || d.isSafari) ? tv : 0;
			d.isMozilla = d.isMoz = (dua.indexOf("Gecko") >= 0 && !d.isKhtml) ? tv : 0;
			d.isFF = d.isIE = 0;
			if (d.isMoz) {
				d.isFF = parseFloat(dua.split("Firefox/")[1]) || 0;
			}
			if (document.all && !d.isOpera) {
				d.isIE = parseFloat(dav.split("MSIE ")[1]) || 0;
			}
			if (dojo.isIE && window.location.protocol === "file:") {
				dojo.config.ieForceActiveXXhr = true;
			}
			var cm = document.compatMode;
			d.isQuirks = cm == "BackCompat" || cm == "QuirksMode" || d.isIE < 6;
			d.locale = dojo.config.locale || (d.isIE ? n.userLanguage : n.language).toLowerCase();
			d._XMLHTTP_PROGIDS = ["Msxml2.XMLHTTP", "Microsoft.XMLHTTP", "Msxml2.XMLHTTP.4.0"];
			d._xhrObj = function () {
				var http = null;
				var last_e = null;
				if (!dojo.isIE || !dojo.config.ieForceActiveXXhr) {
					try {
						http = new XMLHttpRequest();
					}
					catch (e) {
					}
				}
				if (!http) {
					for (var i = 0; i < 3; ++i) {
						var progid = d._XMLHTTP_PROGIDS[i];
						try {
							http = new ActiveXObject(progid);
						}
						catch (e) {
							last_e = e;
						}
						if (http) {
							d._XMLHTTP_PROGIDS = [progid];
							break;
						}
					}
				}
				if (!http) {
					throw new Error("XMLHTTP not available: " + last_e);
				}
				return http;
			};
			d._isDocumentOk = function (http) {
				var stat = http.status || 0;
				return (stat >= 200 && stat < 300) || stat == 304 || stat == 1223 || (!stat && (location.protocol == "file:" || location.protocol == "chrome:"));
			};
			var owloc = window.location + "";
			var base = document.getElementsByTagName("base");
			var hasBase = (base && base.length > 0);
			d._getText = function (uri, fail_ok) {
				var http = this._xhrObj();
				if (!hasBase && dojo._Url) {
					uri = (new dojo._Url(owloc, uri)).toString();
				}
				if (d.config.cacheBust) {
					uri += (uri.indexOf("?") == -1 ? "?" : "&") + String(d.config.cacheBust).replace(/\W+/g, "");
				}
				http.open("GET", uri, false);
				try {
					http.send(null);
					if (!d._isDocumentOk(http)) {
						var err = Error("Unable to load " + uri + " status:" + http.status);
						err.status = http.status;
						err.responseText = http.responseText;
						throw err;
					}
				}
				catch (e) {
					if (fail_ok) {
						return null;
					}
					throw e;
				}
				return http.responseText;
			};
		})();
		dojo._initFired = false;
		dojo._loadInit = function (e) {
			dojo._initFired = true;
			var type = (e && e.type) ? e.type.toLowerCase() : "load";
			if (arguments.callee.initialized || (type != "domcontentloaded" && type != "load")) {
				return;
			}
			arguments.callee.initialized = true;
			if ("_khtmlTimer" in dojo) {
				clearInterval(dojo._khtmlTimer);
				delete dojo._khtmlTimer;
			}
			if (dojo._inFlightCount == 0) {
				dojo._modulesLoaded();
			}
		};
		dojo._fakeLoadInit = function () {
			dojo._loadInit({type:"load"});
		};
		if (dojo.config.afterOnLoad) {
			window.setTimeout(dojo._fakeLoadInit, 1000);
		} else {
			if (document.addEventListener) {
				if (dojo.isOpera || dojo.isFF >= 3 || (dojo.isMoz && dojo.config.enableMozDomContentLoaded === true)) {
					document.addEventListener("DOMContentLoaded", dojo._loadInit, null);
				}
				window.addEventListener("load", dojo._loadInit, null);
			}
			if (dojo.isAIR) {
				window.addEventListener("load", dojo._loadInit, null);
			} else {
				if (/(WebKit|khtml)/i.test(navigator.userAgent)) {
					dojo._khtmlTimer = setInterval(function () {
						if (/loaded|complete/.test(document.readyState)) {
							dojo._loadInit();
						}
					}, 10);
				}
			}
		}
		(function () {
			var _w = window;
			var _handleNodeEvent = function (evtName, fp) {
				var oldHandler = _w[evtName] || function () {
				};
				_w[evtName] = function () {
					fp.apply(_w, arguments);
					oldHandler.apply(_w, arguments);
				};
			};
			if (dojo.isIE) {
				if (!dojo.config.afterOnLoad) {
					document.write("<scr" + "ipt defer src=\"//:\" " + "onreadystatechange=\"if(this.readyState=='complete'){" + dojo._scopeName + "._loadInit();}\">" + "</scr" + "ipt>");
				}
				var _unloading = true;
				_handleNodeEvent("onbeforeunload", function () {
					_w.setTimeout(function () {
						_unloading = false;
					}, 0);
				});
				_handleNodeEvent("onunload", function () {
					if (_unloading) {
						dojo.unloaded();
					}
				});
				try {
					document.namespaces.add("v", "urn:schemas-microsoft-com:vml");
					document.createStyleSheet().addRule("v\\:*", "behavior:url(#default#VML)");
				}
				catch (e) {
				}
			} else {
				_handleNodeEvent("onbeforeunload", function () {
					dojo.unloaded();
				});
			}
		})();
	}
	(function () {
		var mp = dojo.config["modulePaths"];
		if (mp) {
			for (var param in mp) {
				dojo.registerModulePath(param, mp[param]);
			}
		}
	})();
	if (dojo.config.isDebug) {
		dojo.require("dojo._firebug.firebug");
	}
	if (dojo.config.debugAtAllCosts) {
		dojo.config.useXDomain = true;
		dojo.require("dojo._base._loader.loader_xd");
		dojo.require("dojo._base._loader.loader_debug");
	}
	if (!dojo._hasResource["dojo._base.lang"]) {
		dojo._hasResource["dojo._base.lang"] = true;
		dojo.provide("dojo._base.lang");
		dojo.isString = function (it) {
			return !!arguments.length && it != null && (typeof it == "string" || it instanceof String);
		};
		dojo.isArray = function (it) {
			return it && (it instanceof Array || typeof it == "array");
		};
		dojo.isFunction = (function () {
			var _isFunction = function (it) {
				return it && (typeof it == "function" || it instanceof Function);
			};
			return dojo.isSafari ? function (it) {
				if (typeof it == "function" && it == "[object NodeList]") {
					return false;
				}
				return _isFunction(it);
			} : _isFunction;
		})();
		dojo.isObject = function (it) {
			return it !== undefined && (it === null || typeof it == "object" || dojo.isArray(it) || dojo.isFunction(it));
		};
		dojo.isArrayLike = function (it) {
			var d = dojo;
			return it && it !== undefined && !d.isString(it) && !d.isFunction(it) && !(it.tagName && it.tagName.toLowerCase() == "form") && (d.isArray(it) || isFinite(it.length));
		};
		dojo.isAlien = function (it) {
			return it && !dojo.isFunction(it) && /\{\s*\[native code\]\s*\}/.test(String(it));
		};
		dojo.extend = function (constructor, props) {
			for (var i = 1, l = arguments.length; i < l; i++) {
				dojo._mixin(constructor.prototype, arguments[i]);
			}
			return constructor;
		};
		dojo._hitchArgs = function (scope, method) {
			var pre = dojo._toArray(arguments, 2);
			var named = dojo.isString(method);
			return function () {
				var args = dojo._toArray(arguments);
				var f = named ? (scope || dojo.global)[method] : method;
				return f && f.apply(scope || this, pre.concat(args));
			};
		};
		dojo.hitch = function (scope, method) {
			if (arguments.length > 2) {
				return dojo._hitchArgs.apply(dojo, arguments);
			}
			if (!method) {
				method = scope;
				scope = null;
			}
			if (dojo.isString(method)) {
				scope = scope || dojo.global;
				if (!scope[method]) {
					throw (["dojo.hitch: scope[\"", method, "\"] is null (scope=\"", scope, "\")"].join(""));
				}
				return function () {
					return scope[method].apply(scope, arguments || []);
				};
			}
			return !scope ? method : function () {
				return method.apply(scope, arguments || []);
			};
		};
		dojo.delegate = dojo._delegate = function (obj, props) {
			function TMP() {
			}
			TMP.prototype = obj;
			var tmp = new TMP();
			if (props) {
				dojo.mixin(tmp, props);
			}
			return tmp;
		};
		dojo.partial = function (method) {
			var arr = [null];
			return dojo.hitch.apply(dojo, arr.concat(dojo._toArray(arguments)));
		};
		dojo._toArray = function (obj, offset, startWith) {
			var arr = startWith || [];
			for (var x = offset || 0; x < obj.length; x++) {
				arr.push(obj[x]);
			}
			return arr;
		};
		dojo.clone = function (o) {
			if (!o) {
				return o;
			}
			if (dojo.isArray(o)) {
				var r = [];
				for (var i = 0; i < o.length; ++i) {
					r.push(dojo.clone(o[i]));
				}
				return r;
			}
			if (!dojo.isObject(o)) {
				return o;
			}
			if (o.nodeType && o.cloneNode) {
				return o.cloneNode(true);
			}
			if (o instanceof Date) {
				return new Date(o.getTime());
			}
			var r = new o.constructor();
			for (var i in o) {
				if (!(i in r) || r[i] != o[i]) {
					r[i] = dojo.clone(o[i]);
				}
			}
			return r;
		};
		dojo.trim = function (str) {
			return str.replace(/^\s\s*/, "").replace(/\s\s*$/, "");
		};
	}
	if (!dojo._hasResource["dojo._base.declare"]) {
		dojo._hasResource["dojo._base.declare"] = true;
		dojo.provide("dojo._base.declare");
		dojo.declare = function (className, superclass, props) {
			var dd = arguments.callee, mixins;
			if (dojo.isArray(superclass)) {
				mixins = superclass;
				superclass = mixins.shift();
			}
			if (mixins) {
				dojo.forEach(mixins, function (m) {
					if (!m) {
						throw (className + ": mixin #" + i + " is null");
					}
					superclass = dd._delegate(superclass, m);
				});
			}
			var init = (props || 0).constructor, ctor = dd._delegate(superclass), fn;
			for (var i in props) {
				if (dojo.isFunction(fn = props[i]) && !0[i]) {
					fn.nom = i;
				}
			}
			dojo.extend(ctor, {declaredClass:className, _constructor:init, preamble:null}, props || 0);
			ctor.prototype.constructor = ctor;
			return dojo.setObject(className, ctor);
		};
		dojo.mixin(dojo.declare, {_delegate:function (base, mixin) {
			var bp = (base || 0).prototype, mp = (mixin || 0).prototype;
			var ctor = dojo.declare._makeCtor();
			dojo.mixin(ctor, {superclass:bp, mixin:mp, extend:dojo.declare._extend});
			if (base) {
				ctor.prototype = dojo._delegate(bp);
			}
			dojo.extend(ctor, dojo.declare._core, mp || 0, {_constructor:null, preamble:null});
			ctor.prototype.constructor = ctor;
			ctor.prototype.declaredClass = (bp || 0).declaredClass + "_" + (mp || 0).declaredClass;
			return ctor;
		}, _extend:function (props) {
			for (var i in props) {
				if (dojo.isFunction(fn = props[i]) && !0[i]) {
					fn.nom = i;
				}
			}
			dojo.extend(this, props);
		}, _makeCtor:function () {
			return function () {
				this._construct(arguments);
			};
		}, _core:{_construct:function (args) {
			var c = args.callee, s = c.superclass, ct = s && s.constructor, m = c.mixin, mct = m && m.constructor, a = args, ii, fn;
			if (a[0]) {
				if (((fn = a[0].preamble))) {
					a = fn.apply(this, a) || a;
				}
			}
			if ((fn = c.prototype.preamble)) {
				a = fn.apply(this, a) || a;
			}
			if (ct && ct.apply) {
				ct.apply(this, a);
			}
			if (mct && mct.apply) {
				mct.apply(this, a);
			}
			if ((ii = c.prototype._constructor)) {
				ii.apply(this, args);
			}
			if (this.constructor.prototype == c.prototype && (ct = this.postscript)) {
				ct.apply(this, args);
			}
		}, _findMixin:function (mixin) {
			var c = this.constructor, p, m;
			while (c) {
				p = c.superclass;
				m = c.mixin;
				if (m == mixin || (m instanceof mixin.constructor)) {
					return p;
				}
				if (m && (m = m._findMixin(mixin))) {
					return m;
				}
				c = p && p.constructor;
			}
		}, _findMethod:function (name, method, ptype, has) {
			var p = ptype, c, m, f;
			do {
				c = p.constructor;
				m = c.mixin;
				if (m && (m = this._findMethod(name, method, m, has))) {
					return m;
				}
				if ((f = p[name]) && (has == (f == method))) {
					return p;
				}
				p = c.superclass;
			} while (p);
			return !has && (p = this._findMixin(ptype)) && this._findMethod(name, method, p, has);
		}, inherited:function (name, args, newArgs) {
			var a = arguments;
			if (!dojo.isString(a[0])) {
				newArgs = args;
				args = name;
				name = args.callee.nom;
			}
			a = newArgs || args;
			var c = args.callee, p = this.constructor.prototype, fn, mp;
			if (this[name] != c || p[name] == c) {
				mp = this._findMethod(name, c, p, true);
				if (!mp) {
					throw (this.declaredClass + ": inherited method \"" + name + "\" mismatch");
				}
				p = this._findMethod(name, c, mp, false);
			}
			fn = p && p[name];
			if (!fn) {
				throw (mp.declaredClass + ": inherited method \"" + name + "\" not found");
			}
			return fn.apply(this, a);
		}}});
	}
	if (!dojo._hasResource["dojo._base.connect"]) {
		dojo._hasResource["dojo._base.connect"] = true;
		dojo.provide("dojo._base.connect");
		dojo._listener = {getDispatcher:function () {
			return function () {
				var ap = Array.prototype, c = arguments.callee, ls = c._listeners, t = c.target;
				var r = t && t.apply(this, arguments);
				for (var i in ls) {
					if (!(i in ap)) {
						ls[i].apply(this, arguments);
					}
				}
				return r;
			};
		}, add:function (source, method, listener) {
			source = source || dojo.global;
			var f = source[method];
			if (!f || !f._listeners) {
				var d = dojo._listener.getDispatcher();
				d.target = f;
				d._listeners = [];
				f = source[method] = d;
			}
			return f._listeners.push(listener);
		}, remove:function (source, method, handle) {
			var f = (source || dojo.global)[method];
			if (f && f._listeners && handle--) {
				delete f._listeners[handle];
			}
		}};
		dojo.connect = function (obj, event, context, method, dontFix) {
			var a = arguments, args = [], i = 0;
			args.push(dojo.isString(a[0]) ? null : a[i++], a[i++]);
			var a1 = a[i + 1];
			args.push(dojo.isString(a1) || dojo.isFunction(a1) ? a[i++] : null, a[i++]);
			for (var l = a.length; i < l; i++) {
				args.push(a[i]);
			}
			return dojo._connect.apply(this, args);
		};
		dojo._connect = function (obj, event, context, method) {
			var l = dojo._listener, h = l.add(obj, event, dojo.hitch(context, method));
			return [obj, event, h, l];
		};
		dojo.disconnect = function (handle) {
			if (handle && handle[0] !== undefined) {
				dojo._disconnect.apply(this, handle);
				delete handle[0];
			}
		};
		dojo._disconnect = function (obj, event, handle, listener) {
			listener.remove(obj, event, handle);
		};
		dojo._topics = {};
		dojo.subscribe = function (topic, context, method) {
			return [topic, dojo._listener.add(dojo._topics, topic, dojo.hitch(context, method))];
		};
		dojo.unsubscribe = function (handle) {
			if (handle) {
				dojo._listener.remove(dojo._topics, handle[0], handle[1]);
			}
		};
		dojo.publish = function (topic, args) {
			var f = dojo._topics[topic];
			if (f) {
				f.apply(this, args || []);
			}
		};
		dojo.connectPublisher = function (topic, obj, event) {
			var pf = function () {
				dojo.publish(topic, arguments);
			};
			return (event) ? dojo.connect(obj, event, pf) : dojo.connect(obj, pf);
		};
	}
	if (!dojo._hasResource["dojo._base.Deferred"]) {
		dojo._hasResource["dojo._base.Deferred"] = true;
		dojo.provide("dojo._base.Deferred");
		dojo.Deferred = function (canceller) {
			this.chain = [];
			this.id = this._nextId();
			this.fired = -1;
			this.paused = 0;
			this.results = [null, null];
			this.canceller = canceller;
			this.silentlyCancelled = false;
		};
		dojo.extend(dojo.Deferred, {_nextId:(function () {
			var n = 1;
			return function () {
				return n++;
			};
		})(), cancel:function () {
			var err;
			if (this.fired == -1) {
				if (this.canceller) {
					err = this.canceller(this);
				} else {
					this.silentlyCancelled = true;
				}
				if (this.fired == -1) {
					if (!(err instanceof Error)) {
						var res = err;
						err = new Error("Deferred Cancelled");
						err.dojoType = "cancel";
						err.cancelResult = res;
					}
					this.errback(err);
				}
			} else {
				if ((this.fired == 0) && (this.results[0] instanceof dojo.Deferred)) {
					this.results[0].cancel();
				}
			}
		}, _resback:function (res) {
			this.fired = ((res instanceof Error) ? 1 : 0);
			this.results[this.fired] = res;
			this._fire();
		}, _check:function () {
			if (this.fired != -1) {
				if (!this.silentlyCancelled) {
					throw new Error("already called!");
				}
				this.silentlyCancelled = false;
				return;
			}
		}, callback:function (res) {
			this._check();
			this._resback(res);
		}, errback:function (res) {
			this._check();
			if (!(res instanceof Error)) {
				res = new Error(res);
			}
			this._resback(res);
		}, addBoth:function (cb, cbfn) {
			var enclosed = dojo.hitch.apply(dojo, arguments);
			return this.addCallbacks(enclosed, enclosed);
		}, addCallback:function (cb, cbfn) {
			return this.addCallbacks(dojo.hitch.apply(dojo, arguments));
		}, addErrback:function (cb, cbfn) {
			return this.addCallbacks(null, dojo.hitch.apply(dojo, arguments));
		}, addCallbacks:function (cb, eb) {
			this.chain.push([cb, eb]);
			if (this.fired >= 0) {
				this._fire();
			}
			return this;
		}, _fire:function () {
			var chain = this.chain;
			var fired = this.fired;
			var res = this.results[fired];
			var self = this;
			var cb = null;
			while ((chain.length > 0) && (this.paused == 0)) {
				var f = chain.shift()[fired];
				if (!f) {
					continue;
				}
				try {
					res = f(res);
					fired = ((res instanceof Error) ? 1 : 0);
					if (res instanceof dojo.Deferred) {
						cb = function (res) {
							self._resback(res);
							self.paused--;
							if ((self.paused == 0) && (self.fired >= 0)) {
								self._fire();
							}
						};
						this.paused++;
					}
				}
				catch (err) {
					console.debug(err);
					fired = 1;
					res = err;
				}
			}
			this.fired = fired;
			this.results[fired] = res;
			if ((cb) && (this.paused)) {
				res.addBoth(cb);
			}
		}});
	}
	if (!dojo._hasResource["dojo._base.json"]) {
		dojo._hasResource["dojo._base.json"] = true;
		dojo.provide("dojo._base.json");
		dojo.fromJson = function (json) {
			return eval("(" + json + ")");
		};
		dojo._escapeString = function (str) {
			return ("\"" + str.replace(/(["\\])/g, "\\$1") + "\"").replace(/[\f]/g, "\\f").replace(/[\b]/g, "\\b").replace(/[\n]/g, "\\n").replace(/[\t]/g, "\\t").replace(/[\r]/g, "\\r");
		};
		dojo.toJsonIndentStr = "\t";
		dojo.toJson = function (it, prettyPrint, _indentStr) {
			if (it === undefined) {
				return "undefined";
			}
			var objtype = typeof it;
			if (objtype == "number" || objtype == "boolean") {
				return it + "";
			}
			if (it === null) {
				return "null";
			}
			if (dojo.isString(it)) {
				return dojo._escapeString(it);
			}
			if (it.nodeType && it.cloneNode) {
				return "";
			}
			var recurse = arguments.callee;
			var newObj;
			_indentStr = _indentStr || "";
			var nextIndent = prettyPrint ? _indentStr + dojo.toJsonIndentStr : "";
			if (typeof it.__json__ == "function") {
				newObj = it.__json__();
				if (it !== newObj) {
					return recurse(newObj, prettyPrint, nextIndent);
				}
			}
			if (typeof it.json == "function") {
				newObj = it.json();
				if (it !== newObj) {
					return recurse(newObj, prettyPrint, nextIndent);
				}
			}
			var sep = prettyPrint ? " " : "";
			var newLine = prettyPrint ? "\n" : "";
			if (dojo.isArray(it)) {
				var res = dojo.map(it, function (obj) {
					var val = recurse(obj, prettyPrint, nextIndent);
					if (typeof val != "string") {
						val = "undefined";
					}
					return newLine + nextIndent + val;
				});
				return "[" + res.join("," + sep) + newLine + _indentStr + "]";
			}
			if (objtype == "function") {
				return null;
			}
			var output = [];
			for (var key in it) {
				var keyStr;
				if (typeof key == "number") {
					keyStr = "\"" + key + "\"";
				} else {
					if (typeof key == "string") {
						keyStr = dojo._escapeString(key);
					} else {
						continue;
					}
				}
				val = recurse(it[key], prettyPrint, nextIndent);
				if (typeof val != "string") {
					continue;
				}
				output.push(newLine + nextIndent + keyStr + ":" + sep + val);
			}
			return "{" + output.join("," + sep) + newLine + _indentStr + "}";
		};
	}
	if (!dojo._hasResource["dojo._base.array"]) {
		dojo._hasResource["dojo._base.array"] = true;
		dojo.provide("dojo._base.array");
		(function () {
			var _getParts = function (arr, obj, cb) {
				return [dojo.isString(arr) ? arr.split("") : arr, obj || dojo.global, dojo.isString(cb) ? new Function("item", "index", "array", cb) : cb];
			};
			dojo.mixin(dojo, {indexOf:function (array, value, fromIndex, findLast) {
				var step = 1, end = array.length || 0, i = 0;
				if (findLast) {
					i = end - 1;
					step = end = -1;
				}
				if (fromIndex != undefined) {
					i = fromIndex;
				}
				if ((findLast && i > end) || i < end) {
					for (; i != end; i += step) {
						if (array[i] == value) {
							return i;
						}
					}
				}
				return -1;
			}, lastIndexOf:function (array, value, fromIndex) {
				return dojo.indexOf(array, value, fromIndex, true);
			}, forEach:function (arr, callback, thisObject) {
				if (!arr || !arr.length) {
					return;
				}
				var _p = _getParts(arr, thisObject, callback);
				arr = _p[0];
				for (var i = 0, l = _p[0].length; i < l; i++) {
					_p[2].call(_p[1], arr[i], i, arr);
				}
			}, _everyOrSome:function (every, arr, callback, thisObject) {
				var _p = _getParts(arr, thisObject, callback);
				arr = _p[0];
				for (var i = 0, l = arr.length; i < l; i++) {
					var result = !!_p[2].call(_p[1], arr[i], i, arr);
					if (every ^ result) {
						return result;
					}
				}
				return every;
			}, every:function (arr, callback, thisObject) {
				return this._everyOrSome(true, arr, callback, thisObject);
			}, some:function (arr, callback, thisObject) {
				return this._everyOrSome(false, arr, callback, thisObject);
			}, map:function (arr, callback, thisObject) {
				var _p = _getParts(arr, thisObject, callback);
				arr = _p[0];
				var outArr = (arguments[3] ? (new arguments[3]()) : []);
				for (var i = 0; i < arr.length; ++i) {
					outArr.push(_p[2].call(_p[1], arr[i], i, arr));
				}
				return outArr;
			}, filter:function (arr, callback, thisObject) {
				var _p = _getParts(arr, thisObject, callback);
				arr = _p[0];
				var outArr = [];
				for (var i = 0; i < arr.length; i++) {
					if (_p[2].call(_p[1], arr[i], i, arr)) {
						outArr.push(arr[i]);
					}
				}
				return outArr;
			}});
		})();
	}
	if (!dojo._hasResource["dojo._base.Color"]) {
		dojo._hasResource["dojo._base.Color"] = true;
		dojo.provide("dojo._base.Color");
		dojo.Color = function (color) {
			if (color) {
				this.setColor(color);
			}
		};
		dojo.Color.named = {black:[0, 0, 0], silver:[192, 192, 192], gray:[128, 128, 128], white:[255, 255, 255], maroon:[128, 0, 0], red:[255, 0, 0], purple:[128, 0, 128], fuchsia:[255, 0, 255], green:[0, 128, 0], lime:[0, 255, 0], olive:[128, 128, 0], yellow:[255, 255, 0], navy:[0, 0, 128], blue:[0, 0, 255], teal:[0, 128, 128], aqua:[0, 255, 255]};
		dojo.extend(dojo.Color, {r:255, g:255, b:255, a:1, _set:function (r, g, b, a) {
			var t = this;
			t.r = r;
			t.g = g;
			t.b = b;
			t.a = a;
		}, setColor:function (color) {
			var d = dojo;
			if (d.isString(color)) {
				d.colorFromString(color, this);
			} else {
				if (d.isArray(color)) {
					d.colorFromArray(color, this);
				} else {
					this._set(color.r, color.g, color.b, color.a);
					if (!(color instanceof d.Color)) {
						this.sanitize();
					}
				}
			}
			return this;
		}, sanitize:function () {
			return this;
		}, toRgb:function () {
			var t = this;
			return [t.r, t.g, t.b];
		}, toRgba:function () {
			var t = this;
			return [t.r, t.g, t.b, t.a];
		}, toHex:function () {
			var arr = dojo.map(["r", "g", "b"], function (x) {
				var s = this[x].toString(16);
				return s.length < 2 ? "0" + s : s;
			}, this);
			return "#" + arr.join("");
		}, toCss:function (includeAlpha) {
			var t = this, rgb = t.r + ", " + t.g + ", " + t.b;
			return (includeAlpha ? "rgba(" + rgb + ", " + t.a : "rgb(" + rgb) + ")";
		}, toString:function () {
			return this.toCss(true);
		}});
		dojo.blendColors = function (start, end, weight, obj) {
			var d = dojo, t = obj || new dojo.Color();
			d.forEach(["r", "g", "b", "a"], function (x) {
				t[x] = start[x] + (end[x] - start[x]) * weight;
				if (x != "a") {
					t[x] = Math.round(t[x]);
				}
			});
			return t.sanitize();
		};
		dojo.colorFromRgb = function (color, obj) {
			var m = color.toLowerCase().match(/^rgba?\(([\s\.,0-9]+)\)/);
			return m && dojo.colorFromArray(m[1].split(/\s*,\s*/), obj);
		};
		dojo.colorFromHex = function (color, obj) {
			var d = dojo, t = obj || new d.Color(), bits = (color.length == 4) ? 4 : 8, mask = (1 << bits) - 1;
			color = Number("0x" + color.substr(1));
			if (isNaN(color)) {
				return null;
			}
			d.forEach(["b", "g", "r"], function (x) {
				var c = color & mask;
				color >>= bits;
				t[x] = bits == 4 ? 17 * c : c;
			});
			t.a = 1;
			return t;
		};
		dojo.colorFromArray = function (a, obj) {
			var t = obj || new dojo.Color();
			t._set(Number(a[0]), Number(a[1]), Number(a[2]), Number(a[3]));
			if (isNaN(t.a)) {
				t.a = 1;
			}
			return t.sanitize();
		};
		dojo.colorFromString = function (str, obj) {
			var a = dojo.Color.named[str];
			return a && dojo.colorFromArray(a, obj) || dojo.colorFromRgb(str, obj) || dojo.colorFromHex(str, obj);
		};
	}
	if (!dojo._hasResource["dojo._base"]) {
		dojo._hasResource["dojo._base"] = true;
		dojo.provide("dojo._base");
	}
	if (!dojo._hasResource["dojo._base.window"]) {
		dojo._hasResource["dojo._base.window"] = true;
		dojo.provide("dojo._base.window");
		dojo._gearsObject = function () {
			var factory;
			var results;
			var gearsObj = dojo.getObject("google.gears");
			if (gearsObj) {
				return gearsObj;
			}
			if (typeof GearsFactory != "undefined") {
				factory = new GearsFactory();
			} else {
				if (dojo.isIE) {
					try {
						factory = new ActiveXObject("Gears.Factory");
					}
					catch (e) {
					}
				} else {
					if (navigator.mimeTypes["application/x-googlegears"]) {
						factory = document.createElement("object");
						factory.setAttribute("type", "application/x-googlegears");
						factory.setAttribute("width", 0);
						factory.setAttribute("height", 0);
						factory.style.display = "none";
						document.documentElement.appendChild(factory);
					}
				}
			}
			if (!factory) {
				return null;
			}
			dojo.setObject("google.gears.factory", factory);
			return dojo.getObject("google.gears");
		};
		dojo.isGears = (!!dojo._gearsObject()) || 0;
		dojo.doc = window["document"] || null;
		dojo.body = function () {
			return dojo.doc.body || dojo.doc.getElementsByTagName("body")[0];
		};
		dojo.setContext = function (globalObject, globalDocument) {
			dojo.global = globalObject;
			dojo.doc = globalDocument;
		};
		dojo._fireCallback = function (callback, context, cbArguments) {
			if (context && dojo.isString(callback)) {
				callback = context[callback];
			}
			return callback.apply(context, cbArguments || []);
		};
		dojo.withGlobal = function (globalObject, callback, thisObject, cbArguments) {
			var rval;
			var oldGlob = dojo.global;
			var oldDoc = dojo.doc;
			try {
				dojo.setContext(globalObject, globalObject.document);
				rval = dojo._fireCallback(callback, thisObject, cbArguments);
			}
			finally {
				dojo.setContext(oldGlob, oldDoc);
			}
			return rval;
		};
		dojo.withDoc = function (documentObject, callback, thisObject, cbArguments) {
			var rval;
			var oldDoc = dojo.doc;
			try {
				dojo.doc = documentObject;
				rval = dojo._fireCallback(callback, thisObject, cbArguments);
			}
			finally {
				dojo.doc = oldDoc;
			}
			return rval;
		};
	}
	if (!dojo._hasResource["dojo._base.event"]) {
		dojo._hasResource["dojo._base.event"] = true;
		dojo.provide("dojo._base.event");
		(function () {
			var del = (dojo._event_listener = {add:function (node, name, fp) {
				if (!node) {
					return;
				}
				name = del._normalizeEventName(name);
				fp = del._fixCallback(name, fp);
				var oname = name;
				if (!dojo.isIE && (name == "mouseenter" || name == "mouseleave")) {
					var ofp = fp;
					name = (name == "mouseenter") ? "mouseover" : "mouseout";
					fp = function (e) {
						if (!dojo.isDescendant(e.relatedTarget, node)) {
							return ofp.call(this, e);
						}
					};
				}
				node.addEventListener(name, fp, false);
				return fp;
			}, remove:function (node, event, handle) {
				if (node) {
					node.removeEventListener(del._normalizeEventName(event), handle, false);
				}
			}, _normalizeEventName:function (name) {
				return name.slice(0, 2) == "on" ? name.slice(2) : name;
			}, _fixCallback:function (name, fp) {
				return name != "keypress" ? fp : function (e) {
					return fp.call(this, del._fixEvent(e, this));
				};
			}, _fixEvent:function (evt, sender) {
				switch (evt.type) {
				  case "keypress":
					del._setKeyChar(evt);
					break;
				}
				return evt;
			}, _setKeyChar:function (evt) {
				evt.keyChar = evt.charCode ? String.fromCharCode(evt.charCode) : "";
			}});
			dojo.fixEvent = function (evt, sender) {
				return del._fixEvent(evt, sender);
			};
			dojo.stopEvent = function (evt) {
				evt.preventDefault();
				evt.stopPropagation();
			};
			var node_listener = dojo._listener;
			dojo._connect = function (obj, event, context, method, dontFix) {
				var isNode = obj && (obj.nodeType || obj.attachEvent || obj.addEventListener);
				var lid = !isNode ? 0 : (!dontFix ? 1 : 2), l = [dojo._listener, del, node_listener][lid];
				var h = l.add(obj, event, dojo.hitch(context, method));
				return [obj, event, h, lid];
			};
			dojo._disconnect = function (obj, event, handle, listener) {
				([dojo._listener, del, node_listener][listener]).remove(obj, event, handle);
			};
			dojo.keys = {BACKSPACE:8, TAB:9, CLEAR:12, ENTER:13, SHIFT:16, CTRL:17, ALT:18, PAUSE:19, CAPS_LOCK:20, ESCAPE:27, SPACE:32, PAGE_UP:33, PAGE_DOWN:34, END:35, HOME:36, LEFT_ARROW:37, UP_ARROW:38, RIGHT_ARROW:39, DOWN_ARROW:40, INSERT:45, DELETE:46, HELP:47, LEFT_WINDOW:91, RIGHT_WINDOW:92, SELECT:93, NUMPAD_0:96, NUMPAD_1:97, NUMPAD_2:98, NUMPAD_3:99, NUMPAD_4:100, NUMPAD_5:101, NUMPAD_6:102, NUMPAD_7:103, NUMPAD_8:104, NUMPAD_9:105, NUMPAD_MULTIPLY:106, NUMPAD_PLUS:107, NUMPAD_ENTER:108, NUMPAD_MINUS:109, NUMPAD_PERIOD:110, NUMPAD_DIVIDE: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, F13:124, F14:125, F15:126, NUM_LOCK:144, SCROLL_LOCK:145};
			if (dojo.isIE) {
				var _trySetKeyCode = function (e, code) {
					try {
						return (e.keyCode = code);
					}
					catch (e) {
						return 0;
					}
				};
				var iel = dojo._listener;
				if (!dojo.config._allow_leaks) {
					node_listener = iel = dojo._ie_listener = {handlers:[], add:function (source, method, listener) {
						source = source || dojo.global;
						var f = source[method];
						if (!f || !f._listeners) {
							var d = dojo._getIeDispatcher();
							d.target = f && (ieh.push(f) - 1);
							d._listeners = [];
							f = source[method] = d;
						}
						return f._listeners.push(ieh.push(listener) - 1);
					}, remove:function (source, method, handle) {
						var f = (source || dojo.global)[method], l = f && f._listeners;
						if (f && l && handle--) {
							delete ieh[l[handle]];
							delete l[handle];
						}
					}};
					var ieh = iel.handlers;
				}
				dojo.mixin(del, {add:function (node, event, fp) {
					if (!node) {
						return;
					}
					event = del._normalizeEventName(event);
					if (event == "onkeypress") {
						var kd = node.onkeydown;
						if (!kd || !kd._listeners || !kd._stealthKeydownHandle) {
							var h = del.add(node, "onkeydown", del._stealthKeyDown);
							kd = node.onkeydown;
							kd._stealthKeydownHandle = h;
							kd._stealthKeydownRefs = 1;
						} else {
							kd._stealthKeydownRefs++;
						}
					}
					return iel.add(node, event, del._fixCallback(fp));
				}, remove:function (node, event, handle) {
					event = del._normalizeEventName(event);
					iel.remove(node, event, handle);
					if (event == "onkeypress") {
						var kd = node.onkeydown;
						if (--kd._stealthKeydownRefs <= 0) {
							iel.remove(node, "onkeydown", kd._stealthKeydownHandle);
							delete kd._stealthKeydownHandle;
						}
					}
				}, _normalizeEventName:function (eventName) {
					return eventName.slice(0, 2) != "on" ? "on" + eventName : eventName;
				}, _nop:function () {
				}, _fixEvent:function (evt, sender) {
					if (!evt) {
						var w = sender && (sender.ownerDocument || sender.document || sender).parentWindow || window;
						evt = w.event;
					}
					if (!evt) {
						return (evt);
					}
					evt.target = evt.srcElement;
					evt.currentTarget = (sender || evt.srcElement);
					evt.layerX = evt.offsetX;
					evt.layerY = evt.offsetY;
					var se = evt.srcElement, doc = (se && se.ownerDocument) || document;
					var docBody = ((dojo.isIE < 6) || (doc["compatMode"] == "BackCompat")) ? doc.body : doc.documentElement;
					var offset = dojo._getIeDocumentElementOffset();
					evt.pageX = evt.clientX + dojo._fixIeBiDiScrollLeft(docBody.scrollLeft || 0) - offset.x;
					evt.pageY = evt.clientY + (docBody.scrollTop || 0) - offset.y;
					if (evt.type == "mouseover") {
						evt.relatedTarget = evt.fromElement;
					}
					if (evt.type == "mouseout") {
						evt.relatedTarget = evt.toElement;
					}
					evt.stopPropagation = del._stopPropagation;
					evt.preventDefault = del._preventDefault;
					return del._fixKeys(evt);
				}, _fixKeys:function (evt) {
					switch (evt.type) {
					  case "keypress":
						var c = ("charCode" in evt ? evt.charCode : evt.keyCode);
						if (c == 10) {
							c = 0;
							evt.keyCode = 13;
						} else {
							if (c == 13 || c == 27) {
								c = 0;
							} else {
								if (c == 3) {
									c = 99;
								}
							}
						}
						evt.charCode = c;
						del._setKeyChar(evt);
						break;
					}
					return evt;
				}, _punctMap:{106:42, 111:47, 186:59, 187:43, 188:44, 189:45, 190:46, 191:47, 192:96, 219:91, 220:92, 221:93, 222:39}, _stealthKeyDown:function (evt) {
					var kp = evt.currentTarget.onkeypress;
					if (!kp || !kp._listeners) {
						return;
					}
					var k = evt.keyCode;
					var unprintable = (k != 13) && (k != 32) && (k != 27) && (k < 48 || k > 90) && (k < 96 || k > 111) && (k < 186 || k > 192) && (k < 219 || k > 222);
					if (unprintable || evt.ctrlKey) {
						var c = unprintable ? 0 : k;
						if (evt.ctrlKey) {
							if (k == 3 || k == 13) {
								return;
							} else {
								if (c > 95 && c < 106) {
									c -= 48;
								} else {
									if ((!evt.shiftKey) && (c >= 65 && c <= 90)) {
										c += 32;
									} else {
										c = del._punctMap[c] || c;
									}
								}
							}
						}
						var faux = del._synthesizeEvent(evt, {type:"keypress", faux:true, charCode:c});
						kp.call(evt.currentTarget, faux);
						evt.cancelBubble = faux.cancelBubble;
						evt.returnValue = faux.returnValue;
						_trySetKeyCode(evt, faux.keyCode);
					}
				}, _stopPropagation:function () {
					this.cancelBubble = true;
				}, _preventDefault:function () {
					this.bubbledKeyCode = this.keyCode;
					if (this.ctrlKey) {
						_trySetKeyCode(this, 0);
					}
					this.returnValue = false;
				}});
				dojo.stopEvent = function (evt) {
					evt = evt || window.event;
					del._stopPropagation.call(evt);
					del._preventDefault.call(evt);
				};
			}
			del._synthesizeEvent = function (evt, props) {
				var faux = dojo.mixin({}, evt, props);
				del._setKeyChar(faux);
				faux.preventDefault = function () {
					evt.preventDefault();
				};
				faux.stopPropagation = function () {
					evt.stopPropagation();
				};
				return faux;
			};
			if (dojo.isOpera) {
				dojo.mixin(del, {_fixEvent:function (evt, sender) {
					switch (evt.type) {
					  case "keypress":
						var c = evt.which;
						if (c == 3) {
							c = 99;
						}
						c = ((c < 41) && (!evt.shiftKey) ? 0 : c);
						if ((evt.ctrlKey) && (!evt.shiftKey) && (c >= 65) && (c <= 90)) {
							c += 32;
						}
						return del._synthesizeEvent(evt, {charCode:c});
					}
					return evt;
				}});
			}
			if (dojo.isSafari) {
				dojo.mixin(del, {_fixEvent:function (evt, sender) {
					switch (evt.type) {
					  case "keypress":
						var c = evt.charCode, s = evt.shiftKey, k = evt.keyCode;
						k = k || identifierMap[evt.keyIdentifier] || 0;
						if (evt.keyIdentifier == "Enter") {
							c = 0;
						} else {
							if ((evt.ctrlKey) && (c > 0) && (c < 27)) {
								c += 96;
							} else {
								if (c == dojo.keys.SHIFT_TAB) {
									c = dojo.keys.TAB;
									s = true;
								} else {
									c = (c >= 32 && c < 63232 ? c : 0);
								}
							}
						}
						return del._synthesizeEvent(evt, {charCode:c, shiftKey:s, keyCode:k});
					}
					return evt;
				}});
				dojo.mixin(dojo.keys, {SHIFT_TAB:25, UP_ARROW:63232, DOWN_ARROW:63233, LEFT_ARROW:63234, RIGHT_ARROW:63235, F1:63236, F2:63237, F3:63238, F4:63239, F5:63240, F6:63241, F7:63242, F8:63243, F9:63244, F10:63245, F11:63246, F12:63247, PAUSE:63250, DELETE:63272, HOME:63273, END:63275, PAGE_UP:63276, PAGE_DOWN:63277, INSERT:63302, PRINT_SCREEN:63248, SCROLL_LOCK:63249, NUM_LOCK:63289});
				var dk = dojo.keys, identifierMap = {"Up":dk.UP_ARROW, "Down":dk.DOWN_ARROW, "Left":dk.LEFT_ARROW, "Right":dk.RIGHT_ARROW, "PageUp":dk.PAGE_UP, "PageDown":dk.PAGE_DOWN};
			}
		})();
		if (dojo.isIE) {
			dojo._ieDispatcher = function (args, sender) {
				var ap = Array.prototype, h = dojo._ie_listener.handlers, c = args.callee, ls = c._listeners, t = h[c.target];
				var r = t && t.apply(sender, args);
				for (var i in ls) {
					if (!(i in ap)) {
						h[ls[i]].apply(sender, args);
					}
				}
				return r;
			};
			dojo._getIeDispatcher = function () {
				return new Function(dojo._scopeName + "._ieDispatcher(arguments, this)");
			};
			dojo._event_listener._fixCallback = function (fp) {
				var f = dojo._event_listener._fixEvent;
				return function (e) {
					return fp.call(this, f(e, this));
				};
			};
		}
	}
	if (!dojo._hasResource["dojo._base.html"]) {
		dojo._hasResource["dojo._base.html"] = true;
		dojo.provide("dojo._base.html");
		try {
			document.execCommand("BackgroundImageCache", false, true);
		}
		catch (e) {
		}
		if (dojo.isIE || dojo.isOpera) {
			dojo.byId = function (id, doc) {
				if (dojo.isString(id)) {
					var _d = doc || dojo.doc;
					var te = _d.getElementById(id);
					if (te && te.attributes.id.value == id) {
						return te;
					} else {
						var eles = _d.all[id];
						if (!eles || !eles.length) {
							return eles;
						}
						var i = 0;
						while ((te = eles[i++])) {
							if (te.attributes.id.value == id) {
								return te;
							}
						}
					}
				} else {
					return id;
				}
			};
		} else {
			dojo.byId = function (id, doc) {
				return dojo.isString(id) ? (doc || dojo.doc).getElementById(id) : id;
			};
		}
		(function () {
			var d = dojo;
			var _destroyContainer = null;
			dojo.addOnUnload(function () {
				_destroyContainer = null;
			});
			dojo._destroyElement = function (node) {
				node = d.byId(node);
				try {
					if (!_destroyContainer) {
						_destroyContainer = document.createElement("div");
					}
					_destroyContainer.appendChild(node.parentNode ? node.parentNode.removeChild(node) : node);
					_destroyContainer.innerHTML = "";
				}
				catch (e) {
				}
			};
			dojo.isDescendant = function (node, ancestor) {
				try {
					node = d.byId(node);
					ancestor = d.byId(ancestor);
					while (node) {
						if (node === ancestor) {
							return true;
						}
						node = node.parentNode;
					}
				}
				catch (e) {
				}
				return false;
			};
			dojo.setSelectable = function (node, selectable) {
				node = d.byId(node);
				if (d.isMozilla) {
					node.style.MozUserSelect = selectable ? "" : "none";
				} else {
					if (d.isKhtml) {
						node.style.KhtmlUserSelect = selectable ? "auto" : "none";
					} else {
						if (d.isIE) {
							node.unselectable = selectable ? "" : "on";
							d.query("*", node).forEach(function (descendant) {
								descendant.unselectable = selectable ? "" : "on";
							});
						}
					}
				}
			};
			var _insertBefore = function (node, ref) {
				ref.parentNode.insertBefore(node, ref);
				return true;
			};
			var _insertAfter = function (node, ref) {
				var pn = ref.parentNode;
				if (ref == pn.lastChild) {
					pn.appendChild(node);
				} else {
					return _insertBefore(node, ref.nextSibling);
				}
				return true;
			};
			dojo.place = function (node, refNode, position) {
				if (!node || !refNode || position === undefined) {
					return false;
				}
				node = d.byId(node);
				refNode = d.byId(refNode);
				if (typeof position == "number") {
					var cn = refNode.childNodes;
					if ((position == 0 && cn.length == 0) || cn.length == position) {
						refNode.appendChild(node);
						return true;
					}
					if (position == 0) {
						return _insertBefore(node, refNode.firstChild);
					}
					return _insertAfter(node, cn[position - 1]);
				}
				switch (position.toLowerCase()) {
				  case "before":
					return _insertBefore(node, refNode);
				  case "after":
					return _insertAfter(node, refNode);
				  case "first":
					if (refNode.firstChild) {
						return _insertBefore(node, refNode.firstChild);
					}
				  default:
					refNode.appendChild(node);
					return true;
				}
			};
			dojo.boxModel = "content-box";
			if (d.isIE) {
				var _dcm = document.compatMode;
				d.boxModel = _dcm == "BackCompat" || _dcm == "QuirksMode" || d.isIE < 6 ? "border-box" : "content-box";
			}
			var gcs, dv = document.defaultView;
			if (d.isSafari) {
				gcs = function (node) {
					var s = dv.getComputedStyle(node, null);
					if (!s && node.style) {
						node.style.display = "";
						s = dv.getComputedStyle(node, null);
					}
					return s || {};
				};
			} else {
				if (d.isIE) {
					gcs = function (node) {
						return node.currentStyle;
					};
				} else {
					gcs = function (node) {
						return dv.getComputedStyle(node, null);
					};
				}
			}
			dojo.getComputedStyle = gcs;
			if (!d.isIE) {
				dojo._toPixelValue = function (element, value) {
					return parseFloat(value) || 0;
				};
			} else {
				dojo._toPixelValue = function (element, avalue) {
					if (!avalue) {
						return 0;
					}
					if (avalue == "medium") {
						return 4;
					}
					if (avalue.slice && (avalue.slice(-2) == "px")) {
						return parseFloat(avalue);
					}
					with (element) {
						var sLeft = style.left;
						var rsLeft = runtimeStyle.left;
						runtimeStyle.left = currentStyle.left;
						try {
							style.left = avalue;
							avalue = style.pixelLeft;
						}
						catch (e) {
							avalue = 0;
						}
						style.left = sLeft;
						runtimeStyle.left = rsLeft;
					}
					return avalue;
				};
			}
			var px = d._toPixelValue;
			dojo._getOpacity = d.isIE ? function (node) {
				try {
					return node.filters.alpha.opacity / 100;
				}
				catch (e) {
					return 1;
				}
			} : function (node) {
				return gcs(node).opacity;
			};
			dojo._setOpacity = d.isIE ? function (node, opacity) {
				if (opacity == 1) {
					var filterRE = /FILTER:[^;]*;?/i;
					node.style.cssText = node.style.cssText.replace(filterRE, "");
					if (node.nodeName.toLowerCase() == "tr") {
						d.query("> td", node).forEach(function (i) {
							i.style.cssText = i.style.cssText.replace(filterRE, "");
						});
					}
				} else {
					var o = "Alpha(Opacity=" + opacity * 100 + ")";
					node.style.filter = o;
				}
				if (node.nodeName.toLowerCase() == "tr") {
					d.query("> td", node).forEach(function (i) {
						i.style.filter = o;
					});
				}
				return opacity;
			} : function (node, opacity) {
				return node.style.opacity = opacity;
			};
			var _pixelNamesCache = {left:true, top:true};
			var _pixelRegExp = /margin|padding|width|height|max|min|offset/;
			var _toStyleValue = function (node, type, value) {
				type = type.toLowerCase();
				if (d.isIE && value == "auto") {
					if (type == "height") {
						return node.offsetHeight;
					}
					if (type == "width") {
						return node.offsetWidth;
					}
				}
				if (!(type in _pixelNamesCache)) {
					_pixelNamesCache[type] = _pixelRegExp.test(type);
				}
				return _pixelNamesCache[type] ? px(node, value) : value;
			};
			var _floatStyle = d.isIE ? "styleFloat" : "cssFloat";
			var _floatAliases = {"cssFloat":_floatStyle, "styleFloat":_floatStyle, "float":_floatStyle};
			dojo.style = function (node, style, value) {
				var n = d.byId(node), args = arguments.length, op = (style == "opacity");
				style = _floatAliases[style] || style;
				if (args == 3) {
					return op ? d._setOpacity(n, value) : n.style[style] = value;
				}
				if (args == 2 && op) {
					return d._getOpacity(n);
				}
				var s = gcs(n);
				if (args == 2 && !d.isString(style)) {
					for (var x in style) {
						d.style(node, x, style[x]);
					}
					return s;
				}
				return (args == 1) ? s : _toStyleValue(n, style, s[style]);
			};
			dojo._getPadExtents = function (n, computedStyle) {
				var s = computedStyle || gcs(n), l = px(n, s.paddingLeft), t = px(n, s.paddingTop);
				return {l:l, t:t, w:l + px(n, s.paddingRight), h:t + px(n, s.paddingBottom)};
			};
			dojo._getBorderExtents = function (n, computedStyle) {
				var ne = "none", s = computedStyle || gcs(n), bl = (s.borderLeftStyle != ne ? px(n, s.borderLeftWidth) : 0), bt = (s.borderTopStyle != ne ? px(n, s.borderTopWidth) : 0);
				return {l:bl, t:bt, w:bl + (s.borderRightStyle != ne ? px(n, s.borderRightWidth) : 0), h:bt + (s.borderBottomStyle != ne ? px(n, s.borderBottomWidth) : 0)};
			};
			dojo._getPadBorderExtents = function (n, computedStyle) {
				var s = computedStyle || gcs(n), p = d._getPadExtents(n, s), b = d._getBorderExtents(n, s);
				return {l:p.l + b.l, t:p.t + b.t, w:p.w + b.w, h:p.h + b.h};
			};
			dojo._getMarginExtents = function (n, computedStyle) {
				var s = computedStyle || gcs(n), l = px(n, s.marginLeft), t = px(n, s.marginTop), r = px(n, s.marginRight), b = px(n, s.marginBottom);
				if (d.isSafari && (s.position != "absolute")) {
					r = l;
				}
				return {l:l, t:t, w:l + r, h:t + b};
			};
			dojo._getMarginBox = function (node, computedStyle) {
				var s = computedStyle || gcs(node), me = d._getMarginExtents(node, s);
				var l = node.offsetLeft - me.l, t = node.offsetTop - me.t;
				if (d.isMoz) {
					var sl = parseFloat(s.left), st = parseFloat(s.top);
					if (!isNaN(sl) && !isNaN(st)) {
						l = sl, t = st;
					} else {
						var p = node.parentNode;
						if (p && p.style) {
							var pcs = gcs(p);
							if (pcs.overflow != "visible") {
								var be = d._getBorderExtents(p, pcs);
								l += be.l, t += be.t;
							}
						}
					}
				} else {
					if (d.isOpera) {
						var p = node.parentNode;
						if (p) {
							var be = d._getBorderExtents(p);
							l -= be.l, t -= be.t;
						}
					}
				}
				return {l:l, t:t, w:node.offsetWidth + me.w, h:node.offsetHeight + me.h};
			};
			dojo._getContentBox = function (node, computedStyle) {
				var s = computedStyle || gcs(node), pe = d._getPadExtents(node, s), be = d._getBorderExtents(node, s), w = node.clientWidth, h;
				if (!w) {
					w = node.offsetWidth, h = node.offsetHeight;
				} else {
					h = node.clientHeight, be.w = be.h = 0;
				}
				if (d.isOpera) {
					pe.l += be.l;
					pe.t += be.t;
				}
				return {l:pe.l, t:pe.t, w:w - pe.w - be.w, h:h - pe.h - be.h};
			};
			dojo._getBorderBox = function (node, computedStyle) {
				var s = computedStyle || gcs(node), pe = d._getPadExtents(node, s), cb = d._getContentBox(node, s);
				return {l:cb.l - pe.l, t:cb.t - pe.t, w:cb.w + pe.w, h:cb.h + pe.h};
			};
			dojo._setBox = function (node, l, t, w, h, u) {
				u = u || "px";
				var s = node.style;
				if (!isNaN(l)) {
					s.left = l + u;
				}
				if (!isNaN(t)) {
					s.top = t + u;
				}
				if (w >= 0) {
					s.width = w + u;
				}
				if (h >= 0) {
					s.height = h + u;
				}
			};
			dojo._usesBorderBox = function (node) {
				var n = node.tagName;
				return d.boxModel == "border-box" || n == "TABLE" || n == "BUTTON";
			};
			dojo._setContentSize = function (node, widthPx, heightPx, computedStyle) {
				if (d._usesBorderBox(node)) {
					var pb = d._getPadBorderExtents(node, computedStyle);
					if (widthPx >= 0) {
						widthPx += pb.w;
					}
					if (heightPx >= 0) {
						heightPx += pb.h;
					}
				}
				d._setBox(node, NaN, NaN, widthPx, heightPx);
			};
			dojo._setMarginBox = function (node, leftPx, topPx, widthPx, heightPx, computedStyle) {
				var s = computedStyle || gcs(node);
				var bb = d._usesBorderBox(node), pb = bb ? _nilExtents : d._getPadBorderExtents(node, s), mb = d._getMarginExtents(node, s);
				if (widthPx >= 0) {
					widthPx = Math.max(widthPx - pb.w - mb.w, 0);
				}
				if (heightPx >= 0) {
					heightPx = Math.max(heightPx - pb.h - mb.h, 0);
				}
				d._setBox(node, leftPx, topPx, widthPx, heightPx);
			};
			var _nilExtents = {l:0, t:0, w:0, h:0};
			dojo.marginBox = function (node, box) {
				var n = d.byId(node), s = gcs(n), b = box;
				return !b ? d._getMarginBox(n, s) : d._setMarginBox(n, b.l, b.t, b.w, b.h, s);
			};
			dojo.contentBox = function (node, box) {
				var n = dojo.byId(node), s = gcs(n), b = box;
				return !b ? d._getContentBox(n, s) : d._setContentSize(n, b.w, b.h, s);
			};
			var _sumAncestorProperties = function (node, prop) {
				if (!(node = (node || 0).parentNode)) {
					return 0;
				}
				var val, retVal = 0, _b = d.body();
				while (node && node.style) {
					if (gcs(node).position == "fixed") {
						return 0;
					}
					val = node[prop];
					if (val) {
						retVal += val - 0;
						if (node == _b) {
							break;
						}
					}
					node = node.parentNode;
				}
				return retVal;
			};
			dojo._docScroll = function () {
				var _b = d.body(), _w = d.global, de = d.doc.documentElement;
				return {y:(_w.pageYOffset || de.scrollTop || _b.scrollTop || 0), x:(_w.pageXOffset || d._fixIeBiDiScrollLeft(de.scrollLeft) || _b.scrollLeft || 0)};
			};
			dojo._isBodyLtr = function () {
				return !("_bodyLtr" in d) ? d._bodyLtr = gcs(d.body()).direction == "ltr" : d._bodyLtr;
			};
			dojo._getIeDocumentElementOffset = function () {
				var de = d.doc.documentElement;
				return (d.isIE >= 7) ? {x:de.getBoundingClientRect().left, y:de.getBoundingClientRect().top} : {x:d._isBodyLtr() || window.parent == window ? de.clientLeft : de.offsetWidth - de.clientWidth - de.clientLeft, y:de.clientTop};
			};
			dojo._fixIeBiDiScrollLeft = function (scrollLeft) {
				var dd = d.doc;
				if (d.isIE && !dojo._isBodyLtr()) {
					var de = dd.compatMode == "BackCompat" ? dd.body : dd.documentElement;
					return scrollLeft + de.clientWidth - de.scrollWidth;
				}
				return scrollLeft;
			};
			dojo._abs = function (node, includeScroll) {
				var ownerDocument = node.ownerDocument;
				var ret = {x:0, y:0};
				var db = d.body();
				if (d.isIE || (d.isFF >= 3)) {
					var client = node.getBoundingClientRect();
					var offset = (d.isIE) ? d._getIeDocumentElementOffset() : {x:0, y:0};
					ret.x = client.left - offset.x;
					ret.y = client.top - offset.y;
				} else {
					if (ownerDocument["getBoxObjectFor"]) {
						var bo = ownerDocument.getBoxObjectFor(node), b = d._getBorderExtents(node);
						ret.x = bo.x - b.l - _sumAncestorProperties(node, "scrollLeft");
						ret.y = bo.y - b.t - _sumAncestorProperties(node, "scrollTop");
					} else {
						if (node["offsetParent"]) {
							var endNode;
							if (d.isSafari && (gcs(node).position == "absolute") && (node.parentNode == db)) {
								endNode = db;
							} else {
								endNode = db.parentNode;
							}
							if (node.parentNode != db) {
								var nd = node;
								if (d.isOpera) {
									nd = db;
								}
								ret.x -= _sumAncestorProperties(nd, "scrollLeft");
								ret.y -= _sumAncestorProperties(nd, "scrollTop");
							}
							var curnode = node;
							do {
								var n = curnode.offsetLeft;
								if (!d.isOpera || n > 0) {
									ret.x += isNaN(n) ? 0 : n;
								}
								var t = curnode.offsetTop;
								ret.y += isNaN(t) ? 0 : t;
								if (d.isSafari && curnode != node) {
									var cs = gcs(curnode);
									ret.x += px(curnode, cs.borderLeftWidth);
									ret.y += px(curnode, cs.borderTopWidth);
								}
								curnode = curnode.offsetParent;
							} while ((curnode != endNode) && curnode);
						} else {
							if (node.x && node.y) {
								ret.x += isNaN(node.x) ? 0 : node.x;
								ret.y += isNaN(node.y) ? 0 : node.y;
							}
						}
					}
				}
				if (includeScroll) {
					var scroll = d._docScroll();
					ret.y += scroll.y;
					ret.x += scroll.x;
				}
				return ret;
			};
			dojo.coords = function (node, includeScroll) {
				var n = d.byId(node), s = gcs(n), mb = d._getMarginBox(n, s);
				var abs = d._abs(n, includeScroll);
				mb.x = abs.x;
				mb.y = abs.y;
				return mb;
			};
			var _fixAttrName = function (name) {
				switch (name.toLowerCase()) {
				  case "tabindex":
					return (d.isIE && d.isIE < 8) ? "tabIndex" : "tabindex";
				  default:
					return name;
				}
			};
			var _attrProps = {colspan:"colSpan", enctype:"enctype", frameborder:"frameborder", method:"method", rowspan:"rowSpan", scrolling:"scrolling", shape:"shape", span:"span", type:"type", valuetype:"valueType"};
			dojo.hasAttr = function (node, name) {
				var attr = d.byId(node).getAttributeNode(_fixAttrName(name));
				return attr ? attr.specified : false;
			};
			var _evtHdlrMap = {};
			var _ctr = 0;
			var _attrId = dojo._scopeName + "attrid";
			dojo.attr = function (node, name, value) {
				var args = arguments.length;
				if (args == 2 && !d.isString(name)) {
					for (var x in name) {
						d.attr(node, x, name[x]);
					}
					return;
				}
				node = d.byId(node);
				name = _fixAttrName(name);
				if (args == 3) {
					if (d.isFunction(value)) {
						var attrId = d.attr(node, _attrId);
						if (!attrId) {
							attrId = _ctr++;
							d.attr(node, _attrId, attrId);
						}
						if (!_evtHdlrMap[attrId]) {
							_evtHdlrMap[attrId] = {};
						}
						var h = _evtHdlrMap[attrId][name];
						if (h) {
							d.disconnect(h);
						} else {
							try {
								delete node[name];
							}
							catch (e) {
							}
						}
						_evtHdlrMap[attrId][name] = d.connect(node, name, value);
					} else {
						if (typeof value == "boolean") {
							node[name] = value;
						} else {
							node.setAttribute(name, value);
						}
					}
					return;
				} else {
					var prop = _attrProps[name.toLowerCase()];
					if (prop) {
						return node[prop];
					} else {
						var value = node[name];
						return (typeof value == "boolean" || typeof value == "function") ? value : (d.hasAttr(node, name) ? node.getAttribute(name) : null);
					}
				}
			};
			dojo.removeAttr = function (node, name) {
				d.byId(node).removeAttribute(_fixAttrName(name));
			};
		})();
		dojo.hasClass = function (node, classStr) {
			return ((" " + dojo.byId(node).className + " ").indexOf(" " + classStr + " ") >= 0);
		};
		dojo.addClass = function (node, classStr) {
			node = dojo.byId(node);
			var cls = node.className;
			if ((" " + cls + " ").indexOf(" " + classStr + " ") < 0) {
				node.className = cls + (cls ? " " : "") + classStr;
			}
		};
		dojo.removeClass = function (node, classStr) {
			node = dojo.byId(node);
			var t = dojo.trim((" " + node.className + " ").replace(" " + classStr + " ", " "));
			if (node.className != t) {
				node.className = t;
			}
		};
		dojo.toggleClass = function (node, classStr, condition) {
			if (condition === undefined) {
				condition = !dojo.hasClass(node, classStr);
			}
			dojo[condition ? "addClass" : "removeClass"](node, classStr);
		};
	}
	if (!dojo._hasResource["dojo._base.NodeList"]) {
		dojo._hasResource["dojo._base.NodeList"] = true;
		dojo.provide("dojo._base.NodeList");
		(function () {
			var d = dojo;
			var tnl = function (arr) {
				arr.constructor = dojo.NodeList;
				dojo._mixin(arr, dojo.NodeList.prototype);
				return arr;
			};
			var _mapIntoDojo = function (func, alwaysThis) {
				return function () {
					var _a = arguments;
					var aa = d._toArray(_a, 0, [null]);
					var s = this.map(function (i) {
						aa[0] = i;
						return d[func].apply(d, aa);
					});
					return (alwaysThis || ((_a.length > 1) || !d.isString(_a[0]))) ? this : s;
				};
			};
			dojo.NodeList = function () {
				return tnl(Array.apply(null, arguments));
			};
			dojo.NodeList._wrap = tnl;
			dojo.extend(dojo.NodeList, {slice:function () {
				var a = dojo._toArray(arguments);
				return tnl(a.slice.apply(this, a));
			}, splice:function () {
				var a = dojo._toArray(arguments);
				return tnl(a.splice.apply(this, a));
			}, concat:function () {
				var a = dojo._toArray(arguments, 0, [this]);
				return tnl(a.concat.apply([], a));
			}, indexOf:function (value, fromIndex) {
				return d.indexOf(this, value, fromIndex);
			}, lastIndexOf:function () {
				return d.lastIndexOf.apply(d, d._toArray(arguments, 0, [this]));
			}, every:function (callback, thisObject) {
				return d.every(this, callback, thisObject);
			}, some:function (callback, thisObject) {
				return d.some(this, callback, thisObject);
			}, map:function (func, obj) {
				return d.map(this, func, obj, d.NodeList);
			}, forEach:function (callback, thisObj) {
				d.forEach(this, callback, thisObj);
				return this;
			}, coords:function () {
				return d.map(this, d.coords);
			}, attr:_mapIntoDojo("attr"), style:_mapIntoDojo("style"), addClass:_mapIntoDojo("addClass", true), removeClass:_mapIntoDojo("removeClass", true), toggleClass:_mapIntoDojo("toggleClass", true), connect:_mapIntoDojo("connect", true), place:function (queryOrNode, position) {
				var item = d.query(queryOrNode)[0];
				return this.forEach(function (i) {
					d.place(i, item, (position || "last"));
				});
			}, orphan:function (simpleFilter) {
				var orphans = simpleFilter ? d._filterQueryResult(this, simpleFilter) : this;
				orphans.forEach(function (item) {
					if (item.parentNode) {
						item.parentNode.removeChild(item);
					}
				});
				return orphans;
			}, adopt:function (queryOrListOrNode, position) {
				var item = this[0];
				return d.query(queryOrListOrNode).forEach(function (ai) {
					d.place(ai, item, position || "last");
				});
			}, query:function (queryStr) {
				if (!queryStr) {
					return this;
				}
				var ret = d.NodeList();
				this.forEach(function (item) {
					d.query(queryStr, item).forEach(function (subItem) {
						if (subItem !== undefined) {
							ret.push(subItem);
						}
					});
				});
				return ret;
			}, filter:function (simpleQuery) {
				var items = this;
				var _a = arguments;
				var r = d.NodeList();
				var rp = function (t) {
					if (t !== undefined) {
						r.push(t);
					}
				};
				if (d.isString(simpleQuery)) {
					items = d._filterQueryResult(this, _a[0]);
					if (_a.length == 1) {
						return items;
					}
					_a.shift();
				}
				d.forEach(d.filter(items, _a[0], _a[1]), rp);
				return r;
			}, addContent:function (content, position) {
				var ta = d.doc.createElement("span");
				if (d.isString(content)) {
					ta.innerHTML = content;
				} else {
					ta.appendChild(content);
				}
				if (position === undefined) {
					position = "last";
				}
				var ct = (position == "first" || position == "after") ? "lastChild" : "firstChild";
				this.forEach(function (item) {
					var tn = ta.cloneNode(true);
					while (tn[ct]) {
						d.place(tn[ct], item, position);
					}
				});
				return this;
			}, empty:function () {
				return this.forEach("item.innerHTML='';");
			}, instantiate:function (declaredClass, properties) {
				var c = d.isFunction(declaredClass) ? declaredClass : d.getObject(declaredClass);
				return this.forEach(function (i) {
					new c(properties || {}, i);
				});
			}});
			d.forEach(["blur", "focus", "click", "keydown", "keypress", "keyup", "mousedown", "mouseenter", "mouseleave", "mousemove", "mouseout", "mouseover", "mouseup"], function (evt) {
				var _oe = "on" + evt;
				dojo.NodeList.prototype[_oe] = function (a, b) {
					return this.connect(_oe, a, b);
				};
			});
		})();
	}
	if (!dojo._hasResource["dojo._base.query"]) {
		dojo._hasResource["dojo._base.query"] = true;
		dojo.provide("dojo._base.query");
		(function () {
			var d = dojo;
			var childNodesName = dojo.isIE ? "children" : "childNodes";
			var caseSensitive = false;
			var getQueryParts = function (query) {
				if (">~+".indexOf(query.charAt(query.length - 1)) >= 0) {
					query += " *";
				}
				query += " ";
				var ts = function (s, e) {
					return d.trim(query.slice(s, e));
				};
				var qparts = [];
				var inBrackets = -1;
				var inParens = -1;
				var inMatchFor = -1;
				var inPseudo = -1;
				var inClass = -1;
				var inId = -1;
				var inTag = -1;
				var lc = "";
				var cc = "";
				var pStart;
				var x = 0;
				var ql = query.length;
				var currentPart = null;
				var _cp = null;
				var endTag = function () {
					if (inTag >= 0) {
						var tv = (inTag == x) ? null : ts(inTag, x).toLowerCase();
						currentPart[(">~+".indexOf(tv) < 0) ? "tag" : "oper"] = tv;
						inTag = -1;
					}
				};
				var endId = function () {
					if (inId >= 0) {
						currentPart.id = ts(inId, x).replace(/\\/g, "");
						inId = -1;
					}
				};
				var endClass = function () {
					if (inClass >= 0) {
						currentPart.classes.push(ts(inClass + 1, x).replace(/\\/g, ""));
						inClass = -1;
					}
				};
				var endAll = function () {
					endId();
					endTag();
					endClass();
				};
				for (; lc = cc, cc = query.charAt(x), x < ql; x++) {
					if (lc == "\\") {
						continue;
					}
					if (!currentPart) {
						pStart = x;
						currentPart = {query:null, pseudos:[], attrs:[], classes:[], tag:null, oper:null, id:null};
						inTag = x;
					}
					if (inBrackets >= 0) {
						if (cc == "]") {
							if (!_cp.attr) {
								_cp.attr = ts(inBrackets + 1, x);
							} else {
								_cp.matchFor = ts((inMatchFor || inBrackets + 1), x);
							}
							var cmf = _cp.matchFor;
							if (cmf) {
								if ((cmf.charAt(0) == "\"") || (cmf.charAt(0) == "'")) {
									_cp.matchFor = cmf.substring(1, cmf.length - 1);
								}
							}
							currentPart.attrs.push(_cp);
							_cp = null;
							inBrackets = inMatchFor = -1;
						} else {
							if (cc == "=") {
								var addToCc = ("|~^$*".indexOf(lc) >= 0) ? lc : "";
								_cp.type = addToCc + cc;
								_cp.attr = ts(inBrackets + 1, x - addToCc.length);
								inMatchFor = x + 1;
							}
						}
					} else {
						if (inParens >= 0) {
							if (cc == ")") {
								if (inPseudo >= 0) {
									_cp.value = ts(inParens + 1, x);
								}
								inPseudo = inParens = -1;
							}
						} else {
							if (cc == "#") {
								endAll();
								inId = x + 1;
							} else {
								if (cc == ".") {
									endAll();
									inClass = x;
								} else {
									if (cc == ":") {
										endAll();
										inPseudo = x;
									} else {
										if (cc == "[") {
											endAll();
											inBrackets = x;
											_cp = {};
										} else {
											if (cc == "(") {
												if (inPseudo >= 0) {
													_cp = {name:ts(inPseudo + 1, x), value:null};
													currentPart.pseudos.push(_cp);
												}
												inParens = x;
											} else {
												if (cc == " " && lc != cc) {
													endAll();
													if (inPseudo >= 0) {
														currentPart.pseudos.push({name:ts(inPseudo + 1, x)});
													}
													currentPart.hasLoops = (currentPart.pseudos.length || currentPart.attrs.length || currentPart.classes.length);
													currentPart.query = ts(pStart, x);
													currentPart.tag = (currentPart["oper"]) ? null : (currentPart.tag || "*");
													qparts.push(currentPart);
													currentPart = null;
												}
											}
										}
									}
								}
							}
						}
					}
				}
				return qparts;
			};
			var xPathAttrs = {"*=":function (attr, value) {
				return "[contains(@" + attr + ", '" + value + "')]";
			}, "^=":function (attr, value) {
				return "[starts-with(@" + attr + ", '" + value + "')]";
			}, "$=":function (attr, value) {
				return "[substring(@" + attr + ", string-length(@" + attr + ")-" + (value.length - 1) + ")='" + value + "']";
			}, "~=":function (attr, value) {
				return "[contains(concat(' ',@" + attr + ",' '), ' " + value + " ')]";
			}, "|=":function (attr, value) {
				return "[contains(concat(' ',@" + attr + ",' '), ' " + value + "-')]";
			}, "=":function (attr, value) {
				return "[@" + attr + "='" + value + "']";
			}};
			var handleAttrs = function (attrList, query, getDefault, handleMatch) {
				d.forEach(query.attrs, function (attr) {
					var matcher;
					if (attr.type && attrList[attr.type]) {
						matcher = attrList[attr.type](attr.attr, attr.matchFor);
					} else {
						if (attr.attr.length) {
							matcher = getDefault(attr.attr);
						}
					}
					if (matcher) {
						handleMatch(matcher);
					}
				});
			};
			var buildPath = function (query) {
				var xpath = ".";
				var qparts = getQueryParts(d.trim(query));
				while (qparts.length) {
					var tqp = qparts.shift();
					var prefix;
					var postfix = "";
					if (tqp.oper == ">") {
						prefix = "/";
						tqp = qparts.shift();
					} else {
						if (tqp.oper == "~") {
							prefix = "/following-sibling::";
							tqp = qparts.shift();
						} else {
							if (tqp.oper == "+") {
								prefix = "/following-sibling::";
								postfix = "[position()=1]";
								tqp = qparts.shift();
							} else {
								prefix = "//";
							}
						}
					}
					xpath += prefix + tqp.tag + postfix;
					if (tqp.id) {
						xpath += "[@id='" + tqp.id + "'][1]";
					}
					d.forEach(tqp.classes, function (cn) {
						var cnl = cn.length;
						var padding = " ";
						if (cn.charAt(cnl - 1) == "*") {
							padding = "";
							cn = cn.substr(0, cnl - 1);
						}
						xpath += "[contains(concat(' ',@class,' '), ' " + cn + padding + "')]";
					});
					handleAttrs(xPathAttrs, tqp, function (condition) {
						return "[@" + condition + "]";
					}, function (matcher) {
						xpath += matcher;
					});
				}
				return xpath;
			};
			var _xpathFuncCache = {};
			var getXPathFunc = function (path) {
				if (_xpathFuncCache[path]) {
					return _xpathFuncCache[path];
				}
				var doc = d.doc;
				var xpath = buildPath(path);
				var tf = function (parent) {
					var ret = [];
					var xpathResult;
					try {
						xpathResult = doc.evaluate(xpath, parent, null, XPathResult.ANY_TYPE, null);
					}
					catch (e) {
						console.debug("failure in exprssion:", xpath, "under:", parent);
						console.debug(e);
					}
					var result = xpathResult.iterateNext();
					while (result) {
						ret.push(result);
						result = xpathResult.iterateNext();
					}
					return ret;
				};
				return _xpathFuncCache[path] = tf;
			};
			var _filtersCache = {};
			var _simpleFiltersCache = {};
			var agree = function (first, second) {
				if (!first) {
					return second;
				}
				if (!second) {
					return first;
				}
				return function () {
					return first.apply(window, arguments) && second.apply(window, arguments);
				};
			};
			var _childElements = function (root) {
				var ret = [];
				var te, x = 0, tret = root[childNodesName];
				while (te = tret[x++]) {
					if (te.nodeType == 1) {
						ret.push(te);
					}
				}
				return ret;
			};
			var _nextSiblings = function (root, single) {
				var ret = [];
				var te = root;
				while (te = te.nextSibling) {
					if (te.nodeType == 1) {
						ret.push(te);
						if (single) {
							break;
						}
					}
				}
				return ret;
			};
			var _filterDown = function (element, queryParts, matchArr, idx) {
				var nidx = idx + 1;
				var isFinal = (queryParts.length == nidx);
				var tqp = queryParts[idx];
				if (tqp.oper) {
					var ecn = (tqp.oper == ">") ? _childElements(element) : _nextSiblings(element, (tqp.oper == "+"));
					if (!ecn || !ecn.length) {
						return;
					}
					nidx++;
					isFinal = (queryParts.length == nidx);
					var tf = getFilterFunc(queryParts[idx + 1]);
					for (var x = 0, ecnl = ecn.length, te; x < ecnl, te = ecn[x]; x++) {
						if (tf(te)) {
							if (isFinal) {
								matchArr.push(te);
							} else {
								_filterDown(te, queryParts, matchArr, nidx);
							}
						}
					}
				}
				var candidates = getElementsFunc(tqp)(element);
				if (isFinal) {
					while (candidates.length) {
						matchArr.push(candidates.shift());
					}
				} else {
					while (candidates.length) {
						_filterDown(candidates.shift(), queryParts, matchArr, nidx);
					}
				}
			};
			var filterDown = function (elements, queryParts) {
				var ret = [];
				var x = elements.length - 1, te;
				while (te = elements[x--]) {
					_filterDown(te, queryParts, ret, 0);
				}
				return ret;
			};
			var getFilterFunc = function (q) {
				if (_filtersCache[q.query]) {
					return _filtersCache[q.query];
				}
				var ff = null;
				if (q.tag) {
					if (q.tag == "*") {
						ff = agree(ff, function (elem) {
							return (elem.nodeType == 1);
						});
					} else {
						ff = agree(ff, function (elem) {
							return ((elem.nodeType == 1) && (q.tag == elem.tagName.toLowerCase()));
						});
					}
				}
				if (q.id) {
					ff = agree(ff, function (elem) {
						return ((elem.nodeType == 1) && (elem.id == q.id));
					});
				}
				if (q.hasLoops) {
					ff = agree(ff, getSimpleFilterFunc(q));
				}
				return _filtersCache[q.query] = ff;
			};
			var getNodeIndex = function (node) {
				var pn = node.parentNode;
				var pnc = pn.childNodes;
				var nidx = -1;
				var child = pn.firstChild;
				if (!child) {
					return nidx;
				}
				var ci = node["__cachedIndex"];
				var cl = pn["__cachedLength"];
				if (((typeof cl == "number") && (cl != pnc.length)) || (typeof ci != "number")) {
					pn["__cachedLength"] = pnc.length;
					var idx = 1;
					do {
						if (child === node) {
							nidx = idx;
						}
						if (child.nodeType == 1) {
							child["__cachedIndex"] = idx;
							idx++;
						}
						child = child.nextSibling;
					} while (child);
				} else {
					nidx = ci;
				}
				return nidx;
			};
			var firedCount = 0;
			var blank = "";
			var _getAttr = function (elem, attr) {
				if (attr == "class") {
					return elem.className || blank;
				}
				if (attr == "for") {
					return elem.htmlFor || blank;
				}
				return elem.getAttribute(attr, 2) || blank;
			};
			var attrs = {"*=":function (attr, value) {
				return function (elem) {
					return (_getAttr(elem, attr).indexOf(value) >= 0);
				};
			}, "^=":function (attr, value) {
				return function (elem) {
					return (_getAttr(elem, attr).indexOf(value) == 0);
				};
			}, "$=":function (attr, value) {
				var tval = " " + value;
				return function (elem) {
					var ea = " " + _getAttr(elem, attr);
					return (ea.lastIndexOf(value) == (ea.length - value.length));
				};
			}, "~=":function (attr, value) {
				var tval = " " + value + " ";
				return function (elem) {
					var ea = " " + _getAttr(elem, attr) + " ";
					return (ea.indexOf(tval) >= 0);
				};
			}, "|=":function (attr, value) {
				var valueDash = " " + value + "-";
				return function (elem) {
					var ea = " " + (elem.getAttribute(attr, 2) || "");
					return ((ea == value) || (ea.indexOf(valueDash) == 0));
				};
			}, "=":function (attr, value) {
				return function (elem) {
					return (_getAttr(elem, attr) == value);
				};
			}};
			var pseudos = {"first-child":function (name, condition) {
				return function (elem) {
					if (elem.nodeType != 1) {
						return false;
					}
					var fc = elem.previousSibling;
					while (fc && (fc.nodeType != 1)) {
						fc = fc.previousSibling;
					}
					return (!fc);
				};
			}, "last-child":function (name, condition) {
				return function (elem) {
					if (elem.nodeType != 1) {
						return false;
					}
					var nc = elem.nextSibling;
					while (nc && (nc.nodeType != 1)) {
						nc = nc.nextSibling;
					}
					return (!nc);
				};
			}, "empty":function (name, condition) {
				return function (elem) {
					var cn = elem.childNodes;
					var cnl = elem.childNodes.length;
					for (var x = cnl - 1; x >= 0; x--) {
						var nt = cn[x].nodeType;
						if ((nt == 1) || (nt == 3)) {
							return false;
						}
					}
					return true;
				};
			}, "contains":function (name, condition) {
				return function (elem) {
					return (elem.innerHTML.indexOf(condition) >= 0);
				};
			}, "not":function (name, condition) {
				var ntf = getFilterFunc(getQueryParts(condition)[0]);
				return function (elem) {
					return (!ntf(elem));
				};
			}, "nth-child":function (name, condition) {
				var pi = parseInt;
				if (condition == "odd") {
					return function (elem) {
						return (((getNodeIndex(elem)) % 2) == 1);
					};
				} else {
					if ((condition == "2n") || (condition == "even")) {
						return function (elem) {
							return ((getNodeIndex(elem) % 2) == 0);
						};
					} else {
						if (condition.indexOf("0n+") == 0) {
							var ncount = pi(condition.substr(3));
							return function (elem) {
								return (elem.parentNode[childNodesName][ncount - 1] === elem);
							};
						} else {
							if ((condition.indexOf("n+") > 0) && (condition.length > 3)) {
								var tparts = condition.split("n+", 2);
								var pred = pi(tparts[0]);
								var idx = pi(tparts[1]);
								return function (elem) {
									return ((getNodeIndex(elem) % pred) == idx);
								};
							} else {
								if (condition.indexOf("n") == -1) {
									var ncount = pi(condition);
									return function (elem) {
										return (getNodeIndex(elem) == ncount);
									};
								}
							}
						}
					}
				}
			}};
			var defaultGetter = (d.isIE) ? function (cond) {
				var clc = cond.toLowerCase();
				return function (elem) {
					return elem[cond] || elem[clc];
				};
			} : function (cond) {
				return function (elem) {
					return (elem && elem.getAttribute && elem.hasAttribute(cond));
				};
			};
			var getSimpleFilterFunc = function (query) {
				var fcHit = (_simpleFiltersCache[query.query] || _filtersCache[query.query]);
				if (fcHit) {
					return fcHit;
				}
				var ff = null;
				if (query.id) {
					if (query.tag != "*") {
						ff = agree(ff, function (elem) {
							return (elem.tagName.toLowerCase() == query.tag);
						});
					}
				}
				d.forEach(query.classes, function (cname, idx, arr) {
					var isWildcard = cname.charAt(cname.length - 1) == "*";
					if (isWildcard) {
						cname = cname.substr(0, cname.length - 1);
					}
					var re = new RegExp("(?:^|\\s)" + cname + (isWildcard ? ".*" : "") + "(?:\\s|$)");
					ff = agree(ff, function (elem) {
						return re.test(elem.className);
					});
					ff.count = idx;
				});
				d.forEach(query.pseudos, function (pseudo) {
					if (pseudos[pseudo.name]) {
						ff = agree(ff, pseudos[pseudo.name](pseudo.name, pseudo.value));
					}
				});
				handleAttrs(attrs, query, defaultGetter, function (tmatcher) {
					ff = agree(ff, tmatcher);
				});
				if (!ff) {
					ff = function () {
						return true;
					};
				}
				return _simpleFiltersCache[query.query] = ff;
			};
			var _getElementsFuncCache = {};
			var getElementsFunc = function (query, root) {
				var fHit = _getElementsFuncCache[query.query];
				if (fHit) {
					return fHit;
				}
				if (query.id && !query.hasLoops && !query.tag) {
					return _getElementsFuncCache[query.query] = function (root) {
						return [d.byId(query.id)];
					};
				}
				var filterFunc = getSimpleFilterFunc(query);
				var retFunc;
				if (query.tag && query.id && !query.hasLoops) {
					retFunc = function (root) {
						var te = d.byId(query.id);
						if (filterFunc(te)) {
							return [te];
						}
					};
				} else {
					var tret;
					if (!query.hasLoops) {
						retFunc = function (root) {
							var ret = [];
							var te, x = 0, tret = root.getElementsByTagName(query.tag);
							while (te = tret[x++]) {
								ret.push(te);
							}
							return ret;
						};
					} else {
						retFunc = function (root) {
							var ret = [];
							var te, x = 0, tret = root.getElementsByTagName(query.tag);
							while (te = tret[x++]) {
								if (filterFunc(te)) {
									ret.push(te);
								}
							}
							return ret;
						};
					}
				}
				return _getElementsFuncCache[query.query] = retFunc;
			};
			var _partsCache = {};
			var _queryFuncCache = {"*":d.isIE ? function (root) {
				return root.all;
			} : function (root) {
				return root.getElementsByTagName("*");
			}, "~":_nextSiblings, "+":function (root) {
				return _nextSiblings(root, true);
			}, ">":_childElements};
			var getStepQueryFunc = function (query) {
				var qparts = getQueryParts(d.trim(query));
				if (qparts.length == 1) {
					var tt = getElementsFunc(qparts[0]);
					tt.nozip = true;
					return tt;
				}
				var sqf = function (root) {
					var localQueryParts = qparts.slice(0);
					var candidates;
					if (localQueryParts[0].oper == ">") {
						candidates = [root];
					} else {
						candidates = getElementsFunc(localQueryParts.shift())(root);
					}
					return filterDown(candidates, localQueryParts);
				};
				return sqf;
			};
			var _getQueryFunc = ((document["evaluate"] && !d.isSafari) ? function (query) {
				var qparts = query.split(" ");
				if ((document["evaluate"]) && (query.indexOf(":") == -1) && (query.indexOf("+") == -1)) {
					if (((qparts.length > 2) && (query.indexOf(">") == -1)) || (qparts.length > 3) || (query.indexOf("[") >= 0) || ((1 == qparts.length) && (0 <= query.indexOf(".")))) {
						return getXPathFunc(query);
					}
				}
				return getStepQueryFunc(query);
			} : getStepQueryFunc);
			var getQueryFunc = function (query) {
				var qcz = query.charAt(0);
				if (d.doc["querySelectorAll"] && ((!d.isSafari) || (d.isSafari > 3.1)) && (">+~".indexOf(qcz) == -1)) {
					return function (root) {
						var r = root.querySelectorAll(query);
						r.nozip = true;
						return r;
					};
				}
				if (_queryFuncCache[query]) {
					return _queryFuncCache[query];
				}
				if (0 > query.indexOf(",")) {
					return _queryFuncCache[query] = _getQueryFunc(query);
				} else {
					var parts = query.split(/\s*,\s*/);
					var tf = function (root) {
						var pindex = 0;
						var ret = [];
						var tp;
						while (tp = parts[pindex++]) {
							ret = ret.concat(_getQueryFunc(tp, tp.indexOf(" "))(root));
						}
						return ret;
					};
					return _queryFuncCache[query] = tf;
				}
			};
			var _zipIdx = 0;
			var _zip = function (arr) {
				if (arr && arr.nozip) {
					return d.NodeList._wrap(arr);
				}
				var ret = new d.NodeList();
				if (!arr) {
					return ret;
				}
				if (arr[0]) {
					ret.push(arr[0]);
				}
				if (arr.length < 2) {
					return ret;
				}
				_zipIdx++;
				arr[0]["_zipIdx"] = _zipIdx;
				for (var x = 1, te; te = arr[x]; x++) {
					if (arr[x]["_zipIdx"] != _zipIdx) {
						ret.push(te);
					}
					te["_zipIdx"] = _zipIdx;
				}
				return ret;
			};
			d.query = function (query, root) {
				if (query.constructor == d.NodeList) {
					return query;
				}
				if (!d.isString(query)) {
					return new d.NodeList(query);
				}
				if (d.isString(root)) {
					root = d.byId(root);
				}
				return _zip(getQueryFunc(query)(root || d.doc));
			};
			d.query.pseudos = pseudos;
			d._filterQueryResult = function (nodeList, simpleFilter) {
				var tnl = new d.NodeList();
				var ff = (simpleFilter) ? getFilterFunc(getQueryParts(simpleFilter)[0]) : function () {
					return true;
				};
				for (var x = 0, te; te = nodeList[x]; x++) {
					if (ff(te)) {
						tnl.push(te);
					}
				}
				return tnl;
			};
		})();
	}
	if (!dojo._hasResource["dojo._base.xhr"]) {
		dojo._hasResource["dojo._base.xhr"] = true;
		dojo.provide("dojo._base.xhr");
		(function () {
			var _d = dojo;
			function setValue(obj, name, value) {
				var val = obj[name];
				if (_d.isString(val)) {
					obj[name] = [val, value];
				} else {
					if (_d.isArray(val)) {
						val.push(value);
					} else {
						obj[name] = value;
					}
				}
			}
			dojo.formToObject = function (formNode) {
				var ret = {};
				var iq = "input:not([type=file]):not([type=submit]):not([type=image]):not([type=reset]):not([type=button]), select, textarea";
				_d.query(iq, formNode).filter(function (node) {
					return !node.disabled && node.name;
				}).forEach(function (item) {
					var _in = item.name;
					var type = (item.type || "").toLowerCase();
					if (type == "radio" || type == "checkbox") {
						if (item.checked) {
							setValue(ret, _in, item.value);
						}
					} else {
						if (item.multiple) {
							ret[_in] = [];
							_d.query("option", item).forEach(function (opt) {
								if (opt.selected) {
									setValue(ret, _in, opt.value);
								}
							});
						} else {
							setValue(ret, _in, item.value);
							if (type == "image") {
								ret[_in + ".x"] = ret[_in + ".y"] = ret[_in].x = ret[_in].y = 0;
							}
						}
					}
				});
				return ret;
			};
			dojo.objectToQuery = function (map) {
				var enc = encodeURIComponent;
				var pairs = [];
				var backstop = {};
				for (var name in map) {
					var value = map[name];
					if (value != backstop[name]) {
						var assign = enc(name) + "=";
						if (_d.isArray(value)) {
							for (var i = 0; i < value.length; i++) {
								pairs.push(assign + enc(value[i]));
							}
						} else {
							pairs.push(assign + enc(value));
						}
					}
				}
				return pairs.join("&");
			};
			dojo.formToQuery = function (formNode) {
				return _d.objectToQuery(_d.formToObject(formNode));
			};
			dojo.formToJson = function (formNode, prettyPrint) {
				return _d.toJson(_d.formToObject(formNode), prettyPrint);
			};
			dojo.queryToObject = function (str) {
				var ret = {};
				var qp = str.split("&");
				var dec = decodeURIComponent;
				_d.forEach(qp, function (item) {
					if (item.length) {
						var parts = item.split("=");
						var name = dec(parts.shift());
						var val = dec(parts.join("="));
						if (_d.isString(ret[name])) {
							ret[name] = [ret[name]];
						}
						if (_d.isArray(ret[name])) {
							ret[name].push(val);
						} else {
							ret[name] = val;
						}
					}
				});
				return ret;
			};
			dojo._blockAsync = false;
			dojo._contentHandlers = {"text":function (xhr) {
				return xhr.responseText;
			}, "json":function (xhr) {
				if (!dojo.config.usePlainJson) {
					console.warn("Consider using mimetype:text/json-comment-filtered" + " to avoid potential security issues with JSON endpoints" + " (use djConfig.usePlainJson=true to turn off this message)");
				}
				return _d.fromJson(xhr.responseText);
			}, "json-comment-filtered":function (xhr) {
				var value = xhr.responseText;
				var cStartIdx = value.indexOf("/*");
				var cEndIdx = value.lastIndexOf("*/");
				if (cStartIdx == -1 || cEndIdx == -1) {
					throw new Error("JSON was not comment filtered");
				}
				return _d.fromJson(value.substring(cStartIdx + 2, cEndIdx));
			}, "javascript":function (xhr) {
				return _d.eval(xhr.responseText);
			}, "xml":function (xhr) {
				var result = xhr.responseXML;
				if (_d.isIE && (!result || window.location.protocol == "file:")) {
					_d.forEach(["MSXML2", "Microsoft", "MSXML", "MSXML3"], function (prefix) {
						try {
							var dom = new ActiveXObject(prefix + ".XMLDOM");
							dom.async = false;
							dom.loadXML(xhr.responseText);
							result = dom;
						}
						catch (e) {
						}
					});
				}
				return result;
			}};
			dojo._contentHandlers["json-comment-optional"] = function (xhr) {
				var handlers = _d._contentHandlers;
				try {
					return handlers["json-comment-filtered"](xhr);
				}
				catch (e) {
					return handlers["json"](xhr);
				}
			};
			dojo._ioSetArgs = function (args, canceller, okHandler, errHandler) {
				var ioArgs = {args:args, url:args.url};
				var formObject = null;
				if (args.form) {
					var form = _d.byId(args.form);
					var actnNode = form.getAttributeNode("action");
					ioArgs.url = ioArgs.url || (actnNode ? actnNode.value : null);
					formObject = _d.formToObject(form);
				}
				var miArgs = [{}];
				if (formObject) {
					miArgs.push(formObject);
				}
				if (args.content) {
					miArgs.push(args.content);
				}
				if (args.preventCache) {
					miArgs.push({"dojo.preventCache":new Date().valueOf()});
				}
				ioArgs.query = _d.objectToQuery(_d.mixin.apply(null, miArgs));
				ioArgs.handleAs = args.handleAs || "text";
				var d = new _d.Deferred(canceller);
				d.addCallbacks(okHandler, function (error) {
					return errHandler(error, d);
				});
				var ld = args.load;
				if (ld && _d.isFunction(ld)) {
					d.addCallback(function (value) {
						return ld.call(args, value, ioArgs);
					});
				}
				var err = args.error;
				if (err && _d.isFunction(err)) {
					d.addErrback(function (value) {
						return err.call(args, value, ioArgs);
					});
				}
				var handle = args.handle;
				if (handle && _d.isFunction(handle)) {
					d.addBoth(function (value) {
						return handle.call(args, value, ioArgs);
					});
				}
				d.ioArgs = ioArgs;
				return d;
			};
			var _deferredCancel = function (dfd) {
				dfd.canceled = true;
				var xhr = dfd.ioArgs.xhr;
				var _at = typeof xhr.abort;
				if (_at == "function" || _at == "unknown") {
					xhr.abort();
				}
				var err = new Error("xhr cancelled");
				err.dojoType = "cancel";
				return err;
			};
			var _deferredOk = function (dfd) {
				return _d._contentHandlers[dfd.ioArgs.handleAs](dfd.ioArgs.xhr);
			};
			var _deferError = function (error, dfd) {
				console.debug(error);
				return error;
			};
			var _makeXhrDeferred = function (args) {
				var dfd = _d._ioSetArgs(args, _deferredCancel, _deferredOk, _deferError);
				dfd.ioArgs.xhr = _d._xhrObj(dfd.ioArgs.args);
				return dfd;
			};
			var _inFlightIntvl = null;
			var _inFlight = [];
			var _watchInFlight = function () {
				var now = (new Date()).getTime();
				if (!_d._blockAsync) {
					for (var i = 0, tif; i < _inFlight.length && (tif = _inFlight[i]); i++) {
						var dfd = tif.dfd;
						try {
							if (!dfd || dfd.canceled || !tif.validCheck(dfd)) {
								_inFlight.splice(i--, 1);
							} else {
								if (tif.ioCheck(dfd)) {
									_inFlight.splice(i--, 1);
									tif.resHandle(dfd);
								} else {
									if (dfd.startTime) {
										if (dfd.startTime + (dfd.ioArgs.args.timeout || 0) < now) {
											_inFlight.splice(i--, 1);
											var err = new Error("timeout exceeded");
											err.dojoType = "timeout";
											dfd.errback(err);
											dfd.cancel();
										}
									}
								}
							}
						}
						catch (e) {
							console.debug(e);
							dfd.errback(new Error("_watchInFlightError!"));
						}
					}
				}
				if (!_inFlight.length) {
					clearInterval(_inFlightIntvl);
					_inFlightIntvl = null;
					return;
				}
			};
			dojo._ioCancelAll = function () {
				try {
					_d.forEach(_inFlight, function (i) {
						i.dfd.cancel();
					});
				}
				catch (e) {
				}
			};
			if (_d.isIE) {
				_d.addOnUnload(_d._ioCancelAll);
			}
			_d._ioWatch = function (dfd, validCheck, ioCheck, resHandle) {
				if (dfd.ioArgs.args.timeout) {
					dfd.startTime = (new Date()).getTime();
				}
				_inFlight.push({dfd:dfd, validCheck:validCheck, ioCheck:ioCheck, resHandle:resHandle});
				if (!_inFlightIntvl) {
					_inFlightIntvl = setInterval(_watchInFlight, 50);
				}
				_watchInFlight();
			};
			var _defaultContentType = "application/x-www-form-urlencoded";
			var _validCheck = function (dfd) {
				return dfd.ioArgs.xhr.readyState;
			};
			var _ioCheck = function (dfd) {
				return 4 == dfd.ioArgs.xhr.readyState;
			};
			var _resHandle = function (dfd) {
				var xhr = dfd.ioArgs.xhr;
				if (_d._isDocumentOk(xhr)) {
					dfd.callback(dfd);
				} else {
					var err = new Error("Unable to load " + dfd.ioArgs.url + " status:" + xhr.status);
					err.status = xhr.status;
					err.responseText = xhr.responseText;
					dfd.errback(err);
				}
			};
			var _doIt = function (type, dfd) {
				var ioArgs = dfd.ioArgs;
				var args = ioArgs.args;
				var xhr = ioArgs.xhr;
				xhr.open(type, ioArgs.url, args.sync !== true, args.user || undefined, args.password || undefined);
				if (args.headers) {
					for (var hdr in args.headers) {
						if (hdr.toLowerCase() === "content-type" && !args.contentType) {
							args.contentType = args.headers[hdr];
						} else {
							xhr.setRequestHeader(hdr, args.headers[hdr]);
						}
					}
				}
				xhr.setRequestHeader("Content-Type", args.contentType || _defaultContentType);
				if (!args.headers || !args.headers["X-Requested-With"]) {
					xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
				}
				try {
					xhr.send(ioArgs.query);
				}
				catch (e) {
					dfd.cancel();
				}
				_d._ioWatch(dfd, _validCheck, _ioCheck, _resHandle);
				xhr = null;
				return dfd;
			};
			dojo._ioAddQueryToUrl = function (ioArgs) {
				if (ioArgs.query.length) {
					ioArgs.url += (ioArgs.url.indexOf("?") == -1 ? "?" : "&") + ioArgs.query;
					ioArgs.query = null;
				}
			};
			dojo.xhr = function (method, args, hasBody) {
				var dfd = _makeXhrDeferred(args);
				if (!hasBody) {
					_d._ioAddQueryToUrl(dfd.ioArgs);
				}
				return _doIt(method, dfd);
			};
			dojo.xhrGet = function (args) {
				return _d.xhr("GET", args);
			};
			dojo.xhrPost = function (args) {
				return _d.xhr("POST", args, true);
			};
			dojo.rawXhrPost = function (args) {
				var dfd = _makeXhrDeferred(args);
				dfd.ioArgs.query = args.postData;
				return _doIt("POST", dfd);
			};
			dojo.xhrPut = function (args) {
				return _d.xhr("PUT", args, true);
			};
			dojo.rawXhrPut = function (args) {
				var dfd = _makeXhrDeferred(args);
				var ioArgs = dfd.ioArgs;
				if (args.putData) {
					ioArgs.query = args.putData;
					args.putData = null;
				}
				return _doIt("PUT", dfd);
			};
			dojo.xhrDelete = function (args) {
				return _d.xhr("DELETE", args);
			};
		})();
	}
	if (!dojo._hasResource["dojo._base.fx"]) {
		dojo._hasResource["dojo._base.fx"] = true;
		dojo.provide("dojo._base.fx");
		(function () {
			var d = dojo;
			dojo._Line = function (start, end) {
				this.start = start;
				this.end = end;
				this.getValue = function (n) {
					return ((this.end - this.start) * n) + this.start;
				};
			};
			d.declare("dojo._Animation", null, {constructor:function (args) {
				d.mixin(this, args);
				if (d.isArray(this.curve)) {
					this.curve = new d._Line(this.curve[0], this.curve[1]);
				}
			}, duration:350, repeat:0, rate:10, _percent:0, _startRepeatCount:0, _fire:function (evt, args) {
				try {
					if (this[evt]) {
						this[evt].apply(this, args || []);
					}
				}
				catch (e) {
					console.error("exception in animation handler for:", evt);
					console.error(e);
				}
				return this;
			}, play:function (delay, gotoStart) {
				var _t = this;
				if (gotoStart) {
					_t._stopTimer();
					_t._active = _t._paused = false;
					_t._percent = 0;
				} else {
					if (_t._active && !_t._paused) {
						return _t;
					}
				}
				_t._fire("beforeBegin");
				var de = delay || _t.delay;
				var _p = dojo.hitch(_t, "_play", gotoStart);
				if (de > 0) {
					setTimeout(_p, de);
					return _t;
				}
				_p();
				return _t;
			}, _play:function (gotoStart) {
				var _t = this;
				_t._startTime = new Date().valueOf();
				if (_t._paused) {
					_t._startTime -= _t.duration * _t._percent;
				}
				_t._endTime = _t._startTime + _t.duration;
				_t._active = true;
				_t._paused = false;
				var value = _t.curve.getValue(_t._percent);
				if (!_t._percent) {
					if (!_t._startRepeatCount) {
						_t._startRepeatCount = _t.repeat;
					}
					_t._fire("onBegin", [value]);
				}
				_t._fire("onPlay", [value]);
				_t._cycle();
				return _t;
			}, pause:function () {
				this._stopTimer();
				if (!this._active) {
					return this;
				}
				this._paused = true;
				this._fire("onPause", [this.curve.getValue(this._percent)]);
				return this;
			}, gotoPercent:function (percent, andPlay) {
				this._stopTimer();
				this._active = this._paused = true;
				this._percent = percent;
				if (andPlay) {
					this.play();
				}
				return this;
			}, stop:function (gotoEnd) {
				if (!this._timer) {
					return this;
				}
				this._stopTimer();
				if (gotoEnd) {
					this._percent = 1;
				}
				this._fire("onStop", [this.curve.getValue(this._percent)]);
				this._active = this._paused = false;
				return this;
			}, status:function () {
				if (this._active) {
					return this._paused ? "paused" : "playing";
				}
				return "stopped";
			}, _cycle:function () {
				var _t = this;
				if (_t._active) {
					var curr = new Date().valueOf();
					var step = (curr - _t._startTime) / (_t._endTime - _t._startTime);
					if (step >= 1) {
						step = 1;
					}
					_t._percent = step;
					if (_t.easing) {
						step = _t.easing(step);
					}
					_t._fire("onAnimate", [_t.curve.getValue(step)]);
					if (_t._percent < 1) {
						_t._startTimer();
					} else {
						_t._active = false;
						if (_t.repeat > 0) {
							_t.repeat--;
							_t.play(null, true);
						} else {
							if (_t.repeat == -1) {
								_t.play(null, true);
							} else {
								if (_t._startRepeatCount) {
									_t.repeat = _t._startRepeatCount;
									_t._startRepeatCount = 0;
								}
							}
						}
						_t._percent = 0;
						_t._fire("onEnd");
						_t._stopTimer();
					}
				}
				return _t;
			}});
			var ctr = 0;
			var _globalTimerList = [];
			var runner = {run:function () {
			}};
			var timer = null;
			dojo._Animation.prototype._startTimer = function () {
				if (!this._timer) {
					this._timer = d.connect(runner, "run", this, "_cycle");
					ctr++;
				}
				if (!timer) {
					timer = setInterval(d.hitch(runner, "run"), this.rate);
				}
			};
			dojo._Animation.prototype._stopTimer = function () {
				if (this._timer) {
					d.disconnect(this._timer);
					this._timer = null;
					ctr--;
				}
				if (ctr <= 0) {
					clearInterval(timer);
					timer = null;
					ctr = 0;
				}
			};
			var _makeFadeable = (d.isIE) ? function (node) {
				var ns = node.style;
				if (!ns.zoom.length && d.style(node, "zoom") == "normal") {
					ns.zoom = "1";
				}
				if (!ns.width.length && d.style(node, "width") == "auto") {
					ns.width = "auto";
				}
			} : function () {
			};
			dojo._fade = function (args) {
				args.node = d.byId(args.node);
				var fArgs = d.mixin({properties:{}}, args);
				var props = (fArgs.properties.opacity = {});
				props.start = !("start" in fArgs) ? function () {
					return Number(d.style(fArgs.node, "opacity"));
				} : fArgs.start;
				props.end = fArgs.end;
				var anim = d.animateProperty(fArgs);
				d.connect(anim, "beforeBegin", d.partial(_makeFadeable, fArgs.node));
				return anim;
			};
			dojo.fadeIn = function (args) {
				return d._fade(d.mixin({end:1}, args));
			};
			dojo.fadeOut = function (args) {
				return d._fade(d.mixin({end:0}, args));
			};
			dojo._defaultEasing = function (n) {
				return 0.5 + ((Math.sin((n + 1.5) * Math.PI)) / 2);
			};
			var PropLine = function (properties) {
				this._properties = properties;
				for (var p in properties) {
					var prop = properties[p];
					if (prop.start instanceof d.Color) {
						prop.tempColor = new d.Color();
					}
				}
				this.getValue = function (r) {
					var ret = {};
					for (var p in this._properties) {
						var prop = this._properties[p];
						var start = prop.start;
						if (start instanceof d.Color) {
							ret[p] = d.blendColors(start, prop.end, r, prop.tempColor).toCss();
						} else {
							if (!d.isArray(start)) {
								ret[p] = ((prop.end - start) * r) + start + (p != "opacity" ? prop.units || "px" : "");
							}
						}
					}
					return ret;
				};
			};
			dojo.animateProperty = function (args) {
				args.node = d.byId(args.node);
				if (!args.easing) {
					args.easing = d._defaultEasing;
				}
				var anim = new d._Animation(args);
				d.connect(anim, "beforeBegin", anim, function () {
					var pm = {};
					for (var p in this.properties) {
						if (p == "width" || p == "height") {
							this.node.display = "block";
						}
						var prop = this.properties[p];
						prop = pm[p] = d.mixin({}, (d.isObject(prop) ? prop : {end:prop}));
						if (d.isFunction(prop.start)) {
							prop.start = prop.start();
						}
						if (d.isFunction(prop.end)) {
							prop.end = prop.end();
						}
						var isColor = (p.toLowerCase().indexOf("color") >= 0);
						function getStyle(node, p) {
							var v = ({height:node.offsetHeight, width:node.offsetWidth})[p];
							if (v !== undefined) {
								return v;
							}
							v = d.style(node, p);
							return (p == "opacity") ? Number(v) : (isColor ? v : parseFloat(v));
						}
						if (!("end" in prop)) {
							prop.end = getStyle(this.node, p);
						} else {
							if (!("start" in prop)) {
								prop.start = getStyle(this.node, p);
							}
						}
						if (isColor) {
							prop.start = new d.Color(prop.start);
							prop.end = new d.Color(prop.end);
						} else {
							prop.start = (p == "opacity") ? Number(prop.start) : parseFloat(prop.start);
						}
					}
					this.curve = new PropLine(pm);
				});
				d.connect(anim, "onAnimate", anim, function (propValues) {
					for (var s in propValues) {
						d.style(this.node, s, propValues[s]);
					}
				});
				return anim;
			};
			dojo.anim = function (node, properties, duration, easing, onEnd, delay) {
				return d.animateProperty({node:node, duration:duration || d._Animation.prototype.duration, properties:properties, easing:easing, onEnd:onEnd}).play(delay || 0);
			};
		})();
	}
	if (!dojo._hasResource["dojo._base.browser"]) {
		dojo._hasResource["dojo._base.browser"] = true;
		dojo.provide("dojo._base.browser");
		if (dojo.config.require) {
			dojo.forEach(dojo.config.require, "dojo['require'](item);");
		}
	}
	if (!dojo._hasResource["dojo.date.stamp"]) {
		dojo._hasResource["dojo.date.stamp"] = true;
		dojo.provide("dojo.date.stamp");
		dojo.date.stamp.fromISOString = function (formattedString, defaultTime) {
			if (!dojo.date.stamp._isoRegExp) {
				dojo.date.stamp._isoRegExp = /^(?:(\d{4})(?:-(\d{2})(?:-(\d{2}))?)?)?(?:T(\d{2}):(\d{2})(?::(\d{2})(.\d+)?)?((?:[+-](\d{2}):(\d{2}))|Z)?)?$/;
			}
			var match = dojo.date.stamp._isoRegExp.exec(formattedString);
			var result = null;
			if (match) {
				match.shift();
				if (match[1]) {
					match[1]--;
				}
				if (match[6]) {
					match[6] *= 1000;
				}
				if (defaultTime) {
					defaultTime = new Date(defaultTime);
					dojo.map(["FullYear", "Month", "Date", "Hours", "Minutes", "Seconds", "Milliseconds"], function (prop) {
						return defaultTime["get" + prop]();
					}).forEach(function (value, index) {
						if (match[index] === undefined) {
							match[index] = value;
						}
					});
				}
				result = new Date(match[0] || 1970, match[1] || 0, match[2] || 1, match[3] || 0, match[4] || 0, match[5] || 0, match[6] || 0);
				var offset = 0;
				var zoneSign = match[7] && match[7].charAt(0);
				if (zoneSign != "Z") {
					offset = ((match[8] || 0) * 60) + (Number(match[9]) || 0);
					if (zoneSign != "-") {
						offset *= -1;
					}
				}
				if (zoneSign) {
					offset -= result.getTimezoneOffset();
				}
				if (offset) {
					result.setTime(result.getTime() + offset * 60000);
				}
			}
			return result;
		};
		dojo.date.stamp.toISOString = function (dateObject, options) {
			var _ = function (n) {
				return (n < 10) ? "0" + n : n;
			};
			options = options || {};
			var formattedDate = [];
			var getter = options.zulu ? "getUTC" : "get";
			var date = "";
			if (options.selector != "time") {
				var year = dateObject[getter + "FullYear"]();
				date = ["0000".substr((year + "").length) + year, _(dateObject[getter + "Month"]() + 1), _(dateObject[getter + "Date"]())].join("-");
			}
			formattedDate.push(date);
			if (options.selector != "date") {
				var time = [_(dateObject[getter + "Hours"]()), _(dateObject[getter + "Minutes"]()), _(dateObject[getter + "Seconds"]())].join(":");
				var millis = dateObject[getter + "Milliseconds"]();
				if (options.milliseconds) {
					time += "." + (millis < 100 ? "0" : "") + _(millis);
				}
				if (options.zulu) {
					time += "Z";
				} else {
					if (options.selector != "time") {
						var timezoneOffset = dateObject.getTimezoneOffset();
						var absOffset = Math.abs(timezoneOffset);
						time += (timezoneOffset > 0 ? "-" : "+") + _(Math.floor(absOffset / 60)) + ":" + _(absOffset % 60);
					}
				}
				formattedDate.push(time);
			}
			return formattedDate.join("T");
		};
	}
	if (!dojo._hasResource["dojo.parser"]) {
		dojo._hasResource["dojo.parser"] = true;
		dojo.provide("dojo.parser");
		dojo.parser = new function () {
			var d = dojo;
			var dtName = d._scopeName + "Type";
			var qry = "[" + dtName + "]";
			function val2type(value) {
				if (d.isString(value)) {
					return "string";
				}
				if (typeof value == "number") {
					return "number";
				}
				if (typeof value == "boolean") {
					return "boolean";
				}
				if (d.isFunction(value)) {
					return "function";
				}
				if (d.isArray(value)) {
					return "array";
				}
				if (value instanceof Date) {
					return "date";
				}
				if (value instanceof d._Url) {
					return "url";
				}
				return "object";
			}
			function str2obj(value, type) {
				switch (type) {
				  case "string":
					return value;
				  case "number":
					return value.length ? Number(value) : NaN;
				  case "boolean":
					return typeof value == "boolean" ? value : !(value.toLowerCase() == "false");
				  case "function":
					if (d.isFunction(value)) {
						value = value.toString();
						value = d.trim(value.substring(value.indexOf("{") + 1, value.length - 1));
					}
					try {
						if (value.search(/[^\w\.]+/i) != -1) {
							value = d.parser._nameAnonFunc(new Function(value), this);
						}
						return d.getObject(value, false);
					}
					catch (e) {
						return new Function();
					}
				  case "array":
					return value.split(/\s*,\s*/);
				  case "date":
					switch (value) {
					  case "":
						return new Date("");
					  case "now":
						return new Date();
					  default:
						return d.date.stamp.fromISOString(value);
					}
				  case "url":
					return d.baseUrl + value;
				  default:
					return d.fromJson(value);
				}
			}
			var instanceClasses = {};
			function getClassInfo(className) {
				if (!instanceClasses[className]) {
					var cls = d.getObject(className);
					if (!d.isFunction(cls)) {
						throw new Error("Could not load class '" + className + "'. Did you spell the name correctly and use a full path, like 'dijit.form.Button'?");
					}
					var proto = cls.prototype;
					var params = {};
					for (var name in proto) {
						if (name.charAt(0) == "_") {
							continue;
						}
						var defVal = proto[name];
						params[name] = val2type(defVal);
					}
					instanceClasses[className] = {cls:cls, params:params};
				}
				return instanceClasses[className];
			}
			this._functionFromScript = function (script) {
				var preamble = "";
				var suffix = "";
				var argsStr = script.getAttribute("args");
				if (argsStr) {
					d.forEach(argsStr.split(/\s*,\s*/), function (part, idx) {
						preamble += "var " + part + " = arguments[" + idx + "]; ";
					});
				}
				var withStr = script.getAttribute("with");
				if (withStr && withStr.length) {
					d.forEach(withStr.split(/\s*,\s*/), function (part) {
						preamble += "with(" + part + "){";
						suffix += "}";
					});
				}
				return new Function(preamble + script.innerHTML + suffix);
			};
			this.instantiate = function (nodes) {
				var thelist = [];
				d.forEach(nodes, function (node) {
					if (!node) {
						return;
					}
					var type = node.getAttribute(dtName);
					if ((!type) || (!type.length)) {
						return;
					}
					var clsInfo = getClassInfo(type);
					var clazz = clsInfo.cls;
					var ps = clazz._noScript || clazz.prototype._noScript;
					var params = {};
					var attributes = node.attributes;
					for (var name in clsInfo.params) {
						var item = attributes.getNamedItem(name);
						if (!item || (!item.specified && (!dojo.isIE || name.toLowerCase() != "value"))) {
							continue;
						}
						var value = item.value;
						switch (name) {
						  case "class":
							value = node.className;
							break;
						  case "style":
							value = node.style && node.style.cssText;
						}
						var _type = clsInfo.params[name];
						params[name] = str2obj(value, _type);
					}
					if (!ps) {
						var connects = [], calls = [];
						d.query("> script[type^='dojo/']", node).orphan().forEach(function (script) {
							var event = script.getAttribute("event"), type = script.getAttribute("type"), nf = d.parser._functionFromScript(script);
							if (event) {
								if (type == "dojo/connect") {
									connects.push({event:event, func:nf});
								} else {
									params[event] = nf;
								}
							} else {
								calls.push(nf);
							}
						});
					}
					var markupFactory = clazz["markupFactory"];
					if (!markupFactory && clazz["prototype"]) {
						markupFactory = clazz.prototype["markupFactory"];
					}
					var instance = markupFactory ? markupFactory(params, node, clazz) : new clazz(params, node);
					thelist.push(instance);
					var jsname = node.getAttribute("jsId");
					if (jsname) {
						d.setObject(jsname, instance);
					}
					if (!ps) {
						d.forEach(connects, function (connect) {
							d.connect(instance, connect.event, null, connect.func);
						});
						d.forEach(calls, function (func) {
							func.call(instance);
						});
					}
				});
				d.forEach(thelist, function (instance) {
					if (instance && instance.startup && !instance._started && (!instance.getParent || !instance.getParent())) {
						instance.startup();
					}
				});
				return thelist;
			};
			this.parse = function (rootNode) {
				var list = d.query(qry, rootNode);
				var instances = this.instantiate(list);
				return instances;
			};
		}();
		(function () {
			var parseRunner = function () {
				if (dojo.config["parseOnLoad"] == true) {
					dojo.parser.parse();
				}
			};
			if (dojo.exists("dijit.wai.onload") && (dijit.wai.onload === dojo._loaders[0])) {
				dojo._loaders.splice(1, 0, parseRunner);
			} else {
				dojo._loaders.unshift(parseRunner);
			}
		})();
		dojo.parser._anonCtr = 0;
		dojo.parser._anon = {};
		dojo.parser._nameAnonFunc = function (anonFuncPtr, thisObj) {
			var jpn = "$joinpoint";
			var nso = (thisObj || dojo.parser._anon);
			if (dojo.isIE) {
				var cn = anonFuncPtr["__dojoNameCache"];
				if (cn && nso[cn] === anonFuncPtr) {
					return anonFuncPtr["__dojoNameCache"];
				}
			}
			var ret = "__" + dojo.parser._anonCtr++;
			while (typeof nso[ret] != "undefined") {
				ret = "__" + dojo.parser._anonCtr++;
			}
			nso[ret] = anonFuncPtr;
			return ret;
		};
	}
	if (!dojo._hasResource["dojo.regexp"]) {
		dojo._hasResource["dojo.regexp"] = true;
		dojo.provide("dojo.regexp");
		dojo.regexp.escapeString = function (str, except) {
			return str.replace(/([\.$?*!=:|{}\(\)\[\]\\\/^])/g, function (ch) {
				if (except && except.indexOf(ch) != -1) {
					return ch;
				}
				return "\\" + ch;
			});
		};
		dojo.regexp.buildGroupRE = function (arr, re, nonCapture) {
			if (!(arr instanceof Array)) {
				return re(arr);
			}
			var b = [];
			for (var i = 0; i < arr.length; i++) {
				b.push(re(arr[i]));
			}
			return dojo.regexp.group(b.join("|"), nonCapture);
		};
		dojo.regexp.group = function (expression, nonCapture) {
			return "(" + (nonCapture ? "?:" : "") + expression + ")";
		};
	}
	if (!dojo._hasResource["dojo.cookie"]) {
		dojo._hasResource["dojo.cookie"] = true;
		dojo.provide("dojo.cookie");
		dojo.cookie = function (name, value, props) {
			var c = document.cookie;
			if (arguments.length == 1) {
				var matches = c.match(new RegExp("(?:^|; )" + dojo.regexp.escapeString(name) + "=([^;]*)"));
				return matches ? decodeURIComponent(matches[1]) : undefined;
			} else {
				props = props || {};
				var exp = props.expires;
				if (typeof exp == "number") {
					var d = new Date();
					d.setTime(d.getTime() + exp * 24 * 60 * 60 * 1000);
					exp = props.expires = d;
				}
				if (exp && exp.toUTCString) {
					props.expires = exp.toUTCString();
				}
				value = encodeURIComponent(value);
				var updatedCookie = name + "=" + value;
				for (propName in props) {
					updatedCookie += "; " + propName;
					var propValue = props[propName];
					if (propValue !== true) {
						updatedCookie += "=" + propValue;
					}
				}
				document.cookie = updatedCookie;
			}
		};
		dojo.cookie.isSupported = function () {
			if (!("cookieEnabled" in navigator)) {
				this("__djCookieTest__", "CookiesAllowed");
				navigator.cookieEnabled = this("__djCookieTest__") == "CookiesAllowed";
				if (navigator.cookieEnabled) {
					this("__djCookieTest__", "", {expires:-1});
				}
			}
			return navigator.cookieEnabled;
		};
	}
	if (!dojo._hasResource["dojo.date"]) {
		dojo._hasResource["dojo.date"] = true;
		dojo.provide("dojo.date");
		dojo.date.getDaysInMonth = function (dateObject) {
			var month = dateObject.getMonth();
			var days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
			if (month == 1 && dojo.date.isLeapYear(dateObject)) {
				return 29;
			}
			return days[month];
		};
		dojo.date.isLeapYear = function (dateObject) {
			var year = dateObject.getFullYear();
			return !(year % 400) || (!(year % 4) && !!(year % 100));
		};
		dojo.date.getTimezoneName = function (dateObject) {
			var str = dateObject.toString();
			var tz = "";
			var match;
			var pos = str.indexOf("(");
			if (pos > -1) {
				tz = str.substring(++pos, str.indexOf(")"));
			} else {
				var pat = /([A-Z\/]+) \d{4}$/;
				if ((match = str.match(pat))) {
					tz = match[1];
				} else {
					str = dateObject.toLocaleString();
					pat = / ([A-Z\/]+)$/;
					if ((match = str.match(pat))) {
						tz = match[1];
					}
				}
			}
			return (tz == "AM" || tz == "PM") ? "" : tz;
		};
		dojo.date.compare = function (date1, date2, portion) {
			date1 = new Date(Number(date1));
			date2 = new Date(Number(date2 || new Date()));
			if (portion !== "undefined") {
				if (portion == "date") {
					date1.setHours(0, 0, 0, 0);
					date2.setHours(0, 0, 0, 0);
				} else {
					if (portion == "time") {
						date1.setFullYear(0, 0, 0);
						date2.setFullYear(0, 0, 0);
					}
				}
			}
			if (date1 > date2) {
				return 1;
			}
			if (date1 < date2) {
				return -1;
			}
			return 0;
		};
		dojo.date.add = function (date, interval, amount) {
			var sum = new Date(Number(date));
			var fixOvershoot = false;
			var property = "Date";
			switch (interval) {
			  case "day":
				break;
			  case "weekday":
				var days, weeks;
				var mod = amount % 5;
				if (!mod) {
					days = (amount > 0) ? 5 : -5;
					weeks = (amount > 0) ? ((amount - 5) / 5) : ((amount + 5) / 5);
				} else {
					days = mod;
					weeks = parseInt(amount / 5);
				}
				var strt = date.getDay();
				var adj = 0;
				if (strt == 6 && amount > 0) {
					adj = 1;
				} else {
					if (strt == 0 && amount < 0) {
						adj = -1;
					}
				}
				var trgt = strt + days;
				if (trgt == 0 || trgt == 6) {
					adj = (amount > 0) ? 2 : -2;
				}
				amount = (7 * weeks) + days + adj;
				break;
			  case "year":
				property = "FullYear";
				fixOvershoot = true;
				break;
			  case "week":
				amount *= 7;
				break;
			  case "quarter":
				amount *= 3;
			  case "month":
				fixOvershoot = true;
				property = "Month";
				break;
			  case "hour":
			  case "minute":
			  case "second":
			  case "millisecond":
				property = "UTC" + interval.charAt(0).toUpperCase() + interval.substring(1) + "s";
			}
			if (property) {
				sum["set" + property](sum["get" + property]() + amount);
			}
			if (fixOvershoot && (sum.getDate() < date.getDate())) {
				sum.setDate(0);
			}
			return sum;
		};
		dojo.date.difference = function (date1, date2, interval) {
			date2 = date2 || new Date();
			interval = interval || "day";
			var yearDiff = date2.getFullYear() - date1.getFullYear();
			var delta = 1;
			switch (interval) {
			  case "quarter":
				var m1 = date1.getMonth();
				var m2 = date2.getMonth();
				var q1 = Math.floor(m1 / 3) + 1;
				var q2 = Math.floor(m2 / 3) + 1;
				q2 += (yearDiff * 4);
				delta = q2 - q1;
				break;
			  case "weekday":
				var days = Math.round(dojo.date.difference(date1, date2, "day"));
				var weeks = parseInt(dojo.date.difference(date1, date2, "week"));
				var mod = days % 7;
				if (mod == 0) {
					days = weeks * 5;
				} else {
					var adj = 0;
					var aDay = date1.getDay();
					var bDay = date2.getDay();
					weeks = parseInt(days / 7);
					mod = days % 7;
					var dtMark = new Date(date1);
					dtMark.setDate(dtMark.getDate() + (weeks * 7));
					var dayMark = dtMark.getDay();
					if (days > 0) {
						switch (true) {
						  case aDay == 6:
							adj = -1;
							break;
						  case aDay == 0:
							adj = 0;
							break;
						  case bDay == 6:
							adj = -1;
							break;
						  case bDay == 0:
							adj = -2;
							break;
						  case (dayMark + mod) > 5:
							adj = -2;
						}
					} else {
						if (days < 0) {
							switch (true) {
							  case aDay == 6:
								adj = 0;
								break;
							  case aDay == 0:
								adj = 1;
								break;
							  case bDay == 6:
								adj = 2;
								break;
							  case bDay == 0:
								adj = 1;
								break;
							  case (dayMark + mod) < 0:
								adj = 2;
							}
						}
					}
					days += adj;
					days -= (weeks * 2);
				}
				delta = days;
				break;
			  case "year":
				delta = yearDiff;
				break;
			  case "month":
				delta = (date2.getMonth() - date1.getMonth()) + (yearDiff * 12);
				break;
			  case "week":
				delta = parseInt(dojo.date.difference(date1, date2, "day") / 7);
				break;
			  case "day":
				delta /= 24;
			  case "hour":
				delta /= 60;
			  case "minute":
				delta /= 60;
			  case "second":
				delta /= 1000;
			  case "millisecond":
				delta *= date2.getTime() - date1.getTime();
			}
			return Math.round(delta);
		};
	}
	if (!dojo._hasResource["dojo.i18n"]) {
		dojo._hasResource["dojo.i18n"] = true;
		dojo.provide("dojo.i18n");
		dojo.i18n.getLocalization = function (packageName, bundleName, locale) {
			locale = dojo.i18n.normalizeLocale(locale);
			var elements = locale.split("-");
			var module = [packageName, "nls", bundleName].join(".");
			var bundle = dojo._loadedModules[module];
			if (bundle) {
				var localization;
				for (var i = elements.length; i > 0; i--) {
					var loc = elements.slice(0, i).join("_");
					if (bundle[loc]) {
						localization = bundle[loc];
						break;
					}
				}
				if (!localization) {
					localization = bundle.ROOT;
				}
				if (localization) {
					var clazz = function () {
					};
					clazz.prototype = localization;
					return new clazz();
				}
			}
			throw new Error("Bundle not found: " + bundleName + " in " + packageName + " , locale=" + locale);
		};
		dojo.i18n.normalizeLocale = function (locale) {
			var result = locale ? locale.toLowerCase() : dojo.locale;
			if (result == "root") {
				result = "ROOT";
			}
			return result;
		};
		dojo.i18n._requireLocalization = function (moduleName, bundleName, locale, availableFlatLocales) {
			var targetLocale = dojo.i18n.normalizeLocale(locale);
			var bundlePackage = [moduleName, "nls", bundleName].join(".");
			var bestLocale = "";
			if (availableFlatLocales) {
				var flatLocales = availableFlatLocales.split(",");
				for (var i = 0; i < flatLocales.length; i++) {
					if (targetLocale.indexOf(flatLocales[i]) == 0) {
						if (flatLocales[i].length > bestLocale.length) {
							bestLocale = flatLocales[i];
						}
					}
				}
				if (!bestLocale) {
					bestLocale = "ROOT";
				}
			}
			var tempLocale = availableFlatLocales ? bestLocale : targetLocale;
			var bundle = dojo._loadedModules[bundlePackage];
			var localizedBundle = null;
			if (bundle) {
				if (dojo.config.localizationComplete && bundle._built) {
					return;
				}
				var jsLoc = tempLocale.replace(/-/g, "_");
				var translationPackage = bundlePackage + "." + jsLoc;
				localizedBundle = dojo._loadedModules[translationPackage];
			}
			if (!localizedBundle) {
				bundle = dojo["provide"](bundlePackage);
				var syms = dojo._getModuleSymbols(moduleName);
				var modpath = syms.concat("nls").join("/");
				var parent;
				dojo.i18n._searchLocalePath(tempLocale, availableFlatLocales, function (loc) {
					var jsLoc = loc.replace(/-/g, "_");
					var translationPackage = bundlePackage + "." + jsLoc;
					var loaded = false;
					if (!dojo._loadedModules[translationPackage]) {
						dojo["provide"](translationPackage);
						var module = [modpath];
						if (loc != "ROOT") {
							module.push(loc);
						}
						module.push(bundleName);
						var filespec = module.join("/") + ".js";
						loaded = dojo._loadPath(filespec, null, function (hash) {
							var clazz = function () {
							};
							clazz.prototype = parent;
							bundle[jsLoc] = new clazz();
							for (var j in hash) {
								bundle[jsLoc][j] = hash[j];
							}
						});
					} else {
						loaded = true;
					}
					if (loaded && bundle[jsLoc]) {
						parent = bundle[jsLoc];
					} else {
						bundle[jsLoc] = parent;
					}
					if (availableFlatLocales) {
						return true;
					}
				});
			}
			if (availableFlatLocales && targetLocale != bestLocale) {
				bundle[targetLocale.replace(/-/g, "_")] = bundle[bestLocale.replace(/-/g, "_")];
			}
		};
		(function () {
			var extra = dojo.config.extraLocale;
			if (extra) {
				if (!extra instanceof Array) {
					extra = [extra];
				}
				var req = dojo.i18n._requireLocalization;
				dojo.i18n._requireLocalization = function (m, b, locale, availableFlatLocales) {
					req(m, b, locale, availableFlatLocales);
					if (locale) {
						return;
					}
					for (var i = 0; i < extra.length; i++) {
						req(m, b, extra[i], availableFlatLocales);
					}
				};
			}
		})();
		dojo.i18n._searchLocalePath = function (locale, down, searchFunc) {
			locale = dojo.i18n.normalizeLocale(locale);
			var elements = locale.split("-");
			var searchlist = [];
			for (var i = elements.length; i > 0; i--) {
				searchlist.push(elements.slice(0, i).join("-"));
			}
			searchlist.push(false);
			if (down) {
				searchlist.reverse();
			}
			for (var j = searchlist.length - 1; j >= 0; j--) {
				var loc = searchlist[j] || "ROOT";
				var stop = searchFunc(loc);
				if (stop) {
					break;
				}
			}
		};
		dojo.i18n._preloadLocalizations = function (bundlePrefix, localesGenerated) {
			function preload(locale) {
				locale = dojo.i18n.normalizeLocale(locale);
				dojo.i18n._searchLocalePath(locale, true, function (loc) {
					for (var i = 0; i < localesGenerated.length; i++) {
						if (localesGenerated[i] == loc) {
							dojo["require"](bundlePrefix + "_" + loc);
							return true;
						}
					}
					return false;
				});
			}
			preload();
			var extra = dojo.config.extraLocale || [];
			for (var i = 0; i < extra.length; i++) {
				preload(extra[i]);
			}
		};
	}
	if (!dojo._hasResource["dojo.cldr.supplemental"]) {
		dojo._hasResource["dojo.cldr.supplemental"] = true;
		dojo.provide("dojo.cldr.supplemental");
		dojo.cldr.supplemental.getFirstDayOfWeek = function (locale) {
			var firstDay = {mv:5, ae:6, af:6, bh:6, dj:6, dz:6, eg:6, er:6, et:6, iq:6, ir:6, jo:6, ke:6, kw:6, lb:6, ly:6, ma:6, om:6, qa:6, sa:6, sd:6, so:6, tn:6, ye:6, as:0, au:0, az:0, bw:0, ca:0, cn:0, fo:0, ge:0, gl:0, gu:0, hk:0, ie:0, il:0, is:0, jm:0, jp:0, kg:0, kr:0, la:0, mh:0, mo:0, mp:0, mt:0, nz:0, ph:0, pk:0, sg:0, th:0, tt:0, tw:0, um:0, us:0, uz:0, vi:0, za:0, zw:0, et:0, mw:0, ng:0, tj:0, sy:4};
			var country = dojo.cldr.supplemental._region(locale);
			var dow = firstDay[country];
			return (dow === undefined) ? 1 : dow;
		};
		dojo.cldr.supplemental._region = function (locale) {
			locale = dojo.i18n.normalizeLocale(locale);
			var tags = locale.split("-");
			var region = tags[1];
			if (!region) {
				region = {de:"de", en:"us", es:"es", fi:"fi", fr:"fr", hu:"hu", it:"it", ja:"jp", ko:"kr", nl:"nl", pt:"br", sv:"se", zh:"cn"}[tags[0]];
			} else {
				if (region.length == 4) {
					region = tags[2];
				}
			}
			return region;
		};
		dojo.cldr.supplemental.getWeekend = function (locale) {
			var weekendStart = {eg:5, il:5, sy:5, "in":0, ae:4, bh:4, dz:4, iq:4, jo:4, kw:4, lb:4, ly:4, ma:4, om:4, qa:4, sa:4, sd:4, tn:4, ye:4};
			var weekendEnd = {ae:5, bh:5, dz:5, iq:5, jo:5, kw:5, lb:5, ly:5, ma:5, om:5, qa:5, sa:5, sd:5, tn:5, ye:5, af:5, ir:5, eg:6, il:6, sy:6};
			var country = dojo.cldr.supplemental._region(locale);
			var start = weekendStart[country];
			var end = weekendEnd[country];
			if (start === undefined) {
				start = 6;
			}
			if (end === undefined) {
				end = 0;
			}
			return {start:start, end:end};
		};
	}
	if (!dojo._hasResource["dojo.string"]) {
		dojo._hasResource["dojo.string"] = true;
		dojo.provide("dojo.string");
		dojo.string.pad = function (text, size, ch, end) {
			var out = String(text);
			if (!ch) {
				ch = "0";
			}
			while (out.length < size) {
				if (end) {
					out += ch;
				} else {
					out = ch + out;
				}
			}
			return out;
		};
		dojo.string.substitute = function (template, map, transform, thisObject) {
			return template.replace(/\$\{([^\s\:\}]+)(?:\:([^\s\:\}]+))?\}/g, function (match, key, format) {
				var value = dojo.getObject(key, false, map);
				if (format) {
					value = dojo.getObject(format, false, thisObject)(value);
				}
				if (transform) {
					value = transform(value, key);
				}
				return value.toString();
			});
		};
		dojo.string.trim = function (str) {
			str = str.replace(/^\s+/, "");
			for (var i = str.length - 1; i > 0; i--) {
				if (/\S/.test(str.charAt(i))) {
					str = str.substring(0, i + 1);
					break;
				}
			}
			return str;
		};
	}
	if (!dojo._hasResource["dojo.date.locale"]) {
		dojo._hasResource["dojo.date.locale"] = true;
		dojo.provide("dojo.date.locale");
		(function () {
			function formatPattern(dateObject, bundle, fullYear, pattern) {
				return pattern.replace(/([a-z])\1*/ig, function (match) {
					var s, pad;
					var c = match.charAt(0);
					var l = match.length;
					var widthList = ["abbr", "wide", "narrow"];
					switch (c) {
					  case "G":
						s = bundle[(l < 4) ? "eraAbbr" : "eraNames"][dateObject.getFullYear() < 0 ? 0 : 1];
						break;
					  case "y":
						s = dateObject.getFullYear();
						switch (l) {
						  case 1:
							break;
						  case 2:
							if (!fullYear) {
								s = String(s);
								s = s.substr(s.length - 2);
								break;
							}
						  default:
							pad = true;
						}
						break;
					  case "Q":
					  case "q":
						s = Math.ceil((dateObject.getMonth() + 1) / 3);
						pad = true;
						break;
					  case "M":
					  case "L":
						var m = dateObject.getMonth();
						var widthM;
						switch (l) {
						  case 1:
						  case 2:
							s = m + 1;
							pad = true;
							break;
						  case 3:
						  case 4:
						  case 5:
							widthM = widthList[l - 3];
							break;
						}
						if (widthM) {
							var typeM = (c == "L") ? "standalone" : "format";
							var propM = ["months", typeM, widthM].join("-");
							s = bundle[propM][m];
						}
						break;
					  case "w":
						var firstDay = 0;
						s = dojo.date.locale._getWeekOfYear(dateObject, firstDay);
						pad = true;
						break;
					  case "d":
						s = dateObject.getDate();
						pad = true;
						break;
					  case "D":
						s = dojo.date.locale._getDayOfYear(dateObject);
						pad = true;
						break;
					  case "E":
					  case "e":
					  case "c":
						var d = dateObject.getDay();
						var widthD;
						switch (l) {
						  case 1:
						  case 2:
							if (c == "e") {
								var first = dojo.cldr.supplemental.getFirstDayOfWeek(options.locale);
								d = (d - first + 7) % 7;
							}
							if (c != "c") {
								s = d + 1;
								pad = true;
								break;
							}
						  case 3:
						  case 4:
						  case 5:
							widthD = widthList[l - 3];
							break;
						}
						if (widthD) {
							var typeD = (c == "c") ? "standalone" : "format";
							var propD = ["days", typeD, widthD].join("-");
							s = bundle[propD][d];
						}
						break;
					  case "a":
						var timePeriod = (dateObject.getHours() < 12) ? "am" : "pm";
						s = bundle[timePeriod];
						break;
					  case "h":
					  case "H":
					  case "K":
					  case "k":
						var h = dateObject.getHours();
						switch (c) {
						  case "h":
							s = (h % 12) || 12;
							break;
						  case "H":
							s = h;
							break;
						  case "K":
							s = (h % 12);
							break;
						  case "k":
							s = h || 24;
							break;
						}
						pad = true;
						break;
					  case "m":
						s = dateObject.getMinutes();
						pad = true;
						break;
					  case "s":
						s = dateObject.getSeconds();
						pad = true;
						break;
					  case "S":
						s = Math.round(dateObject.getMilliseconds() * Math.pow(10, l - 3));
						pad = true;
						break;
					  case "v":
					  case "z":
						s = dojo.date.getTimezoneName(dateObject);
						if (s) {
							break;
						}
						l = 4;
					  case "Z":
						var offset = dateObject.getTimezoneOffset();
						var tz = [(offset <= 0 ? "+" : "-"), dojo.string.pad(Math.floor(Math.abs(offset) / 60), 2), dojo.string.pad(Math.abs(offset) % 60, 2)];
						if (l == 4) {
							tz.splice(0, 0, "GMT");
							tz.splice(3, 0, ":");
						}
						s = tz.join("");
						break;
					  default:
						throw new Error("dojo.date.locale.format: invalid pattern char: " + pattern);
					}
					if (pad) {
						s = dojo.string.pad(s, l);
					}
					return s;
				});
			}
			dojo.date.locale.format = function (dateObject, options) {
				options = options || {};
				var locale = dojo.i18n.normalizeLocale(options.locale);
				var formatLength = options.formatLength || "short";
				var bundle = dojo.date.locale._getGregorianBundle(locale);
				var str = [];
				var sauce = dojo.hitch(this, formatPattern, dateObject, bundle, options.fullYear);
				if (options.selector == "year") {
					var year = dateObject.getFullYear();
					if (locale.match(/^zh|^ja/)) {
						year += "年";
					}
					return year;
				}
				if (options.selector != "time") {
					var datePattern = options.datePattern || bundle["dateFormat-" + formatLength];
					if (datePattern) {
						str.push(_processPattern(datePattern, sauce));
					}
				}
				if (options.selector != "date") {
					var timePattern = options.timePattern || bundle["timeFormat-" + formatLength];
					if (timePattern) {
						str.push(_processPattern(timePattern, sauce));
					}
				}
				var result = str.join(" ");
				return result;
			};
			dojo.date.locale.regexp = function (options) {
				return dojo.date.locale._parseInfo(options).regexp;
			};
			dojo.date.locale._parseInfo = function (options) {
				options = options || {};
				var locale = dojo.i18n.normalizeLocale(options.locale);
				var bundle = dojo.date.locale._getGregorianBundle(locale);
				var formatLength = options.formatLength || "short";
				var datePattern = options.datePattern || bundle["dateFormat-" + formatLength];
				var timePattern = options.timePattern || bundle["timeFormat-" + formatLength];
				var pattern;
				if (options.selector == "date") {
					pattern = datePattern;
				} else {
					if (options.selector == "time") {
						pattern = timePattern;
					} else {
						pattern = datePattern + " " + timePattern;
					}
				}
				var tokens = [];
				var re = _processPattern(pattern, dojo.hitch(this, _buildDateTimeRE, tokens, bundle, options));
				return {regexp:re, tokens:tokens, bundle:bundle};
			};
			dojo.date.locale.parse = function (value, options) {
				var info = dojo.date.locale._parseInfo(options);
				var tokens = info.tokens, bundle = info.bundle;
				var re = new RegExp("^" + info.regexp + "$");
				var match = re.exec(value);
				if (!match) {
					return null;
				}
				var widthList = ["abbr", "wide", "narrow"];
				var result = [1970, 0, 1, 0, 0, 0, 0];
				var amPm = "";
				var valid = dojo.every(match, function (v, i) {
					if (!i) {
						return true;
					}
					var token = tokens[i - 1];
					var l = token.length;
					switch (token.charAt(0)) {
					  case "y":
						if (l != 2 && options.strict) {
							result[0] = v;
						} else {
							if (v < 100) {
								v = Number(v);
								var year = "" + new Date().getFullYear();
								var century = year.substring(0, 2) * 100;
								var cutoff = Math.min(Number(year.substring(2, 4)) + 20, 99);
								var num = (v < cutoff) ? century + v : century - 100 + v;
								result[0] = num;
							} else {
								if (options.strict) {
									return false;
								}
								result[0] = v;
							}
						}
						break;
					  case "M":
						if (l > 2) {
							var months = bundle["months-format-" + widthList[l - 3]].concat();
							if (!options.strict) {
								v = v.replace(".", "").toLowerCase();
								months = dojo.map(months, function (s) {
									return s.replace(".", "").toLowerCase();
								});
							}
							v = dojo.indexOf(months, v);
							if (v == -1) {
								return false;
							}
						} else {
							v--;
						}
						result[1] = v;
						break;
					  case "E":
					  case "e":
						var days = bundle["days-format-" + widthList[l - 3]].concat();
						if (!options.strict) {
							v = v.toLowerCase();
							days = dojo.map(days, function (d) {
								return d.toLowerCase();
							});
						}
						v = dojo.indexOf(days, v);
						if (v == -1) {
							return false;
						}
						break;
					  case "D":
						result[1] = 0;
					  case "d":
						result[2] = v;
						break;
					  case "a":
						var am = options.am || bundle.am;
						var pm = options.pm || bundle.pm;
						if (!options.strict) {
							var period = /\./g;
							v = v.replace(period, "").toLowerCase();
							am = am.replace(period, "").toLowerCase();
							pm = pm.replace(period, "").toLowerCase();
						}
						if (options.strict && v != am && v != pm) {
							return false;
						}
						amPm = (v == pm) ? "p" : (v == am) ? "a" : "";
						break;
					  case "K":
						if (v == 24) {
							v = 0;
						}
					  case "h":
					  case "H":
					  case "k":
						if (v > 23) {
							return false;
						}
						result[3] = v;
						break;
					  case "m":
						result[4] = v;
						break;
					  case "s":
						result[5] = v;
						break;
					  case "S":
						result[6] = v;
					}
					return true;
				});
				var hours = +result[3];
				if (amPm === "p" && hours < 12) {
					result[3] = hours + 12;
				} else {
					if (amPm === "a" && hours == 12) {
						result[3] = 0;
					}
				}
				var dateObject = new Date(result[0], result[1], result[2], result[3], result[4], result[5], result[6]);
				if (options.strict) {
					dateObject.setFullYear(result[0]);
				}
				var allTokens = tokens.join("");
				if (!valid || (allTokens.indexOf("M") != -1 && dateObject.getMonth() != result[1]) || (allTokens.indexOf("d") != -1 && dateObject.getDate() != result[2])) {
					return null;
				}
				return dateObject;
			};
			function _processPattern(pattern, applyPattern, applyLiteral, applyAll) {
				var identity = function (x) {
					return x;
				};
				applyPattern = applyPattern || identity;
				applyLiteral = applyLiteral || identity;
				applyAll = applyAll || identity;
				var chunks = pattern.match(/(''|[^'])+/g);
				var literal = false;
				dojo.forEach(chunks, function (chunk, i) {
					if (!chunk) {
						chunks[i] = "";
					} else {
						chunks[i] = (literal ? applyLiteral : applyPattern)(chunk);
						literal = !literal;
					}
				});
				return applyAll(chunks.join(""));
			}
			function _buildDateTimeRE(tokens, bundle, options, pattern) {
				pattern = dojo.regexp.escapeString(pattern);
				if (!options.strict) {
					pattern = pattern.replace(" a", " ?a");
				}
				return pattern.replace(/([a-z])\1*/ig, function (match) {
					var s;
					var c = match.charAt(0);
					var l = match.length;
					var p2 = "", p3 = "";
					if (options.strict) {
						if (l > 1) {
							p2 = "0" + "{" + (l - 1) + "}";
						}
						if (l > 2) {
							p3 = "0" + "{" + (l - 2) + "}";
						}
					} else {
						p2 = "0?";
						p3 = "0{0,2}";
					}
					switch (c) {
					  case "y":
						s = "\\d{2,4}";
						break;
					  case "M":
						s = (l > 2) ? "\\S+" : p2 + "[1-9]|1[0-2]";
						break;
					  case "D":
						s = p2 + "[1-9]|" + p3 + "[1-9][0-9]|[12][0-9][0-9]|3[0-5][0-9]|36[0-6]";
						break;
					  case "d":
						s = p2 + "[1-9]|[12]\\d|3[01]";
						break;
					  case "w":
						s = p2 + "[1-9]|[1-4][0-9]|5[0-3]";
						break;
					  case "E":
						s = "\\S+";
						break;
					  case "h":
						s = p2 + "[1-9]|1[0-2]";
						break;
					  case "k":
						s = p2 + "\\d|1[01]";
						break;
					  case "H":
						s = p2 + "\\d|1\\d|2[0-3]";
						break;
					  case "K":
						s = p2 + "[1-9]|1\\d|2[0-4]";
						break;
					  case "m":
					  case "s":
						s = "[0-5]\\d";
						break;
					  case "S":
						s = "\\d{" + l + "}";
						break;
					  case "a":
						var am = options.am || bundle.am || "AM";
						var pm = options.pm || bundle.pm || "PM";
						if (options.strict) {
							s = am + "|" + pm;
						} else {
							s = am + "|" + pm;
							if (am != am.toLowerCase()) {
								s += "|" + am.toLowerCase();
							}
							if (pm != pm.toLowerCase()) {
								s += "|" + pm.toLowerCase();
							}
						}
						break;
					  default:
						s = ".*";
					}
					if (tokens) {
						tokens.push(match);
					}
					return "(" + s + ")";
				}).replace(/[\xa0 ]/g, "[\\s\\xa0]");
			}
		})();
		(function () {
			var _customFormats = [];
			dojo.date.locale.addCustomFormats = function (packageName, bundleName) {
				_customFormats.push({pkg:packageName, name:bundleName});
			};
			dojo.date.locale._getGregorianBundle = function (locale) {
				var gregorian = {};
				dojo.forEach(_customFormats, function (desc) {
					var bundle = dojo.i18n.getLocalization(desc.pkg, desc.name, locale);
					gregorian = dojo.mixin(gregorian, bundle);
				}, this);
				return gregorian;
			};
		})();
		dojo.date.locale.addCustomFormats("dojo.cldr", "gregorian");
		dojo.date.locale.getNames = function (item, type, use, locale) {
			var label;
			var lookup = dojo.date.locale._getGregorianBundle(locale);
			var props = [item, use, type];
			if (use == "standAlone") {
				label = lookup[props.join("-")];
			}
			props[1] = "format";
			return (label || lookup[props.join("-")]).concat();
		};
		dojo.date.locale.isWeekend = function (dateObject, locale) {
			var weekend = dojo.cldr.supplemental.getWeekend(locale);
			var day = (dateObject || new Date()).getDay();
			if (weekend.end < weekend.start) {
				weekend.end += 7;
				if (day < weekend.start) {
					day += 7;
				}
			}
			return day >= weekend.start && day <= weekend.end;
		};
		dojo.date.locale._getDayOfYear = function (dateObject) {
			return dojo.date.difference(new Date(dateObject.getFullYear(), 0, 1), dateObject) + 1;
		};
		dojo.date.locale._getWeekOfYear = function (dateObject, firstDayOfWeek) {
			if (arguments.length == 1) {
				firstDayOfWeek = 0;
			}
			var firstDayOfYear = new Date(dateObject.getFullYear(), 0, 1).getDay();
			var adj = (firstDayOfYear - firstDayOfWeek + 7) % 7;
			var week = Math.floor((dojo.date.locale._getDayOfYear(dateObject) + adj - 1) / 7);
			if (firstDayOfYear == firstDayOfWeek) {
				week++;
			}
			return week;
		};
	}
	if (!dojo._hasResource["dojo.dnd.common"]) {
		dojo._hasResource["dojo.dnd.common"] = true;
		dojo.provide("dojo.dnd.common");
		dojo.dnd._copyKey = navigator.appVersion.indexOf("Macintosh") < 0 ? "ctrlKey" : "metaKey";
		dojo.dnd.getCopyKeyState = function (e) {
			return e[dojo.dnd._copyKey];
		};
		dojo.dnd._uniqueId = 0;
		dojo.dnd.getUniqueId = function () {
			var id;
			do {
				id = dojo._scopeName + "Unique" + (++dojo.dnd._uniqueId);
			} while (dojo.byId(id));
			return id;
		};
		dojo.dnd._empty = {};
		dojo.dnd.isFormElement = function (e) {
			var t = e.target;
			if (t.nodeType == 3) {
				t = t.parentNode;
			}
			return " button textarea input select option ".indexOf(" " + t.tagName.toLowerCase() + " ") >= 0;
		};
	}
	if (!dojo._hasResource["dojo.dnd.autoscroll"]) {
		dojo._hasResource["dojo.dnd.autoscroll"] = true;
		dojo.provide("dojo.dnd.autoscroll");
		dojo.dnd.getViewport = function () {
			var d = dojo.doc, dd = d.documentElement, w = window, b = dojo.body();
			if (dojo.isMozilla) {
				return {w:dd.clientWidth, h:w.innerHeight};
			} else {
				if (!dojo.isOpera && w.innerWidth) {
					return {w:w.innerWidth, h:w.innerHeight};
				} else {
					if (!dojo.isOpera && dd && dd.clientWidth) {
						return {w:dd.clientWidth, h:dd.clientHeight};
					} else {
						if (b.clientWidth) {
							return {w:b.clientWidth, h:b.clientHeight};
						}
					}
				}
			}
			return null;
		};
		dojo.dnd.V_TRIGGER_AUTOSCROLL = 32;
		dojo.dnd.H_TRIGGER_AUTOSCROLL = 32;
		dojo.dnd.V_AUTOSCROLL_VALUE = 16;
		dojo.dnd.H_AUTOSCROLL_VALUE = 16;
		dojo.dnd.autoScroll = function (e) {
			var v = dojo.dnd.getViewport(), dx = 0, dy = 0;
			if (e.clientX < dojo.dnd.H_TRIGGER_AUTOSCROLL) {
				dx = -dojo.dnd.H_AUTOSCROLL_VALUE;
			} else {
				if (e.clientX > v.w - dojo.dnd.H_TRIGGER_AUTOSCROLL) {
					dx = dojo.dnd.H_AUTOSCROLL_VALUE;
				}
			}
			if (e.clientY < dojo.dnd.V_TRIGGER_AUTOSCROLL) {
				dy = -dojo.dnd.V_AUTOSCROLL_VALUE;
			} else {
				if (e.clientY > v.h - dojo.dnd.V_TRIGGER_AUTOSCROLL) {
					dy = dojo.dnd.V_AUTOSCROLL_VALUE;
				}
			}
			window.scrollBy(dx, dy);
		};
		dojo.dnd._validNodes = {"div":1, "p":1, "td":1};
		dojo.dnd._validOverflow = {"auto":1, "scroll":1};
		dojo.dnd.autoScrollNodes = function (e) {
			for (var n = e.target; n; ) {
				if (n.nodeType == 1 && (n.tagName.toLowerCase() in dojo.dnd._validNodes)) {
					var s = dojo.getComputedStyle(n);
					if (s.overflow.toLowerCase() in dojo.dnd._validOverflow) {
						var b = dojo._getContentBox(n, s), t = dojo._abs(n, true);
						b.l += t.x + n.scrollLeft;
						b.t += t.y + n.scrollTop;
						var w = Math.min(dojo.dnd.H_TRIGGER_AUTOSCROLL, b.w / 2), h = Math.min(dojo.dnd.V_TRIGGER_AUTOSCROLL, b.h / 2), rx = e.pageX - b.l, ry = e.pageY - b.t, dx = 0, dy = 0;
						if (rx > 0 && rx < b.w) {
							if (rx < w) {
								dx = -dojo.dnd.H_AUTOSCROLL_VALUE;
							} else {
								if (rx > b.w - w) {
									dx = dojo.dnd.H_AUTOSCROLL_VALUE;
								}
							}
						}
						if (ry > 0 && ry < b.h) {
							if (ry < h) {
								dy = -dojo.dnd.V_AUTOSCROLL_VALUE;
							} else {
								if (ry > b.h - h) {
									dy = dojo.dnd.V_AUTOSCROLL_VALUE;
								}
							}
						}
						var oldLeft = n.scrollLeft, oldTop = n.scrollTop;
						n.scrollLeft = n.scrollLeft + dx;
						n.scrollTop = n.scrollTop + dy;
						if (oldLeft != n.scrollLeft || oldTop != n.scrollTop) {
							return;
						}
					}
				}
				try {
					n = n.parentNode;
				}
				catch (x) {
					n = null;
				}
			}
			dojo.dnd.autoScroll(e);
		};
	}
	if (!dojo._hasResource["dojo.dnd.Mover"]) {
		dojo._hasResource["dojo.dnd.Mover"] = true;
		dojo.provide("dojo.dnd.Mover");
		dojo.declare("dojo.dnd.Mover", null, {constructor:function (node, e, host) {
			this.node = dojo.byId(node);
			this.marginBox = {l:e.pageX, t:e.pageY};
			this.mouseButton = e.button;
			var h = this.host = host, d = node.ownerDocument, firstEvent = dojo.connect(d, "onmousemove", this, "onFirstMove");
			this.events = [dojo.connect(d, "onmousemove", this, "onMouseMove"), dojo.connect(d, "onmouseup", this, "onMouseUp"), dojo.connect(d, "ondragstart", dojo, "stopEvent"), dojo.connect(d, "onselectstart", dojo, "stopEvent"), firstEvent];
			if (h && h.onMoveStart) {
				h.onMoveStart(this);
			}
		}, onMouseMove:function (e) {
			dojo.dnd.autoScroll(e);
			var m = this.marginBox;
			this.host.onMove(this, {l:m.l + e.pageX, t:m.t + e.pageY});
		}, onMouseUp:function (e) {
			if (this.mouseButton == e.button) {
				this.destroy();
			}
		}, onFirstMove:function () {
			var s = this.node.style, l, t;
			switch (s.position) {
			  case "relative":
			  case "absolute":
				l = Math.round(parseFloat(s.left));
				t = Math.round(parseFloat(s.top));
				break;
			  default:
				s.position = "absolute";
				var m = dojo.marginBox(this.node);
				l = m.l;
				t = m.t;
				break;
			}
			this.marginBox.l = l - this.marginBox.l;
			this.marginBox.t = t - this.marginBox.t;
			this.host.onFirstMove(this);
			dojo.disconnect(this.events.pop());
		}, destroy:function () {
			dojo.forEach(this.events, dojo.disconnect);
			var h = this.host;
			if (h && h.onMoveStop) {
				h.onMoveStop(this);
			}
			this.events = this.node = null;
		}});
	}
	if (!dojo._hasResource["dojo.dnd.Moveable"]) {
		dojo._hasResource["dojo.dnd.Moveable"] = true;
		dojo.provide("dojo.dnd.Moveable");
		dojo.declare("dojo.dnd.Moveable", null, {handle:"", delay:0, skip:false, constructor:function (node, params) {
			this.node = dojo.byId(node);
			if (!params) {
				params = {};
			}
			this.handle = params.handle ? dojo.byId(params.handle) : null;
			if (!this.handle) {
				this.handle = this.node;
			}
			this.delay = params.delay > 0 ? params.delay : 0;
			this.skip = params.skip;
			this.mover = params.mover ? params.mover : dojo.dnd.Mover;
			this.events = [dojo.connect(this.handle, "onmousedown", this, "onMouseDown"), dojo.connect(this.handle, "ondragstart", this, "onSelectStart"), dojo.connect(this.handle, "onselectstart", this, "onSelectStart")];
		}, markupFactory:function (params, node) {
			return new dojo.dnd.Moveable(node, params);
		}, destroy:function () {
			dojo.forEach(this.events, dojo.disconnect);
			this.events = this.node = this.handle = null;
		}, onMouseDown:function (e) {
			if (this.skip && dojo.dnd.isFormElement(e)) {
				return;
			}
			if (this.delay) {
				this.events.push(dojo.connect(this.handle, "onmousemove", this, "onMouseMove"));
				this.events.push(dojo.connect(this.handle, "onmouseup", this, "onMouseUp"));
				this._lastX = e.pageX;
				this._lastY = e.pageY;
			} else {
				new this.mover(this.node, e, this);
			}
			dojo.stopEvent(e);
		}, onMouseMove:function (e) {
			if (Math.abs(e.pageX - this._lastX) > this.delay || Math.abs(e.pageY - this._lastY) > this.delay) {
				this.onMouseUp(e);
				new this.mover(this.node, e, this);
			}
			dojo.stopEvent(e);
		}, onMouseUp:function (e) {
			dojo.disconnect(this.events.pop());
			dojo.disconnect(this.events.pop());
		}, onSelectStart:function (e) {
			if (!this.skip || !dojo.dnd.isFormElement(e)) {
				dojo.stopEvent(e);
			}
		}, onMoveStart:function (mover) {
			dojo.publish("/dnd/move/start", [mover]);
			dojo.addClass(dojo.body(), "dojoMove");
			dojo.addClass(this.node, "dojoMoveItem");
		}, onMoveStop:function (mover) {
			dojo.publish("/dnd/move/stop", [mover]);
			dojo.removeClass(dojo.body(), "dojoMove");
			dojo.removeClass(this.node, "dojoMoveItem");
		}, onFirstMove:function (mover) {
		}, onMove:function (mover, leftTop) {
			this.onMoving(mover, leftTop);
			var s = mover.node.style;
			s.left = leftTop.l + "px";
			s.top = leftTop.t + "px";
			this.onMoved(mover, leftTop);
		}, onMoving:function (mover, leftTop) {
		}, onMoved:function (mover, leftTop) {
		}});
	}
	if (!dojo._hasResource["dojo.dnd.TimedMoveable"]) {
		dojo._hasResource["dojo.dnd.TimedMoveable"] = true;
		dojo.provide("dojo.dnd.TimedMoveable");
		(function () {
			var oldOnMove = dojo.dnd.Moveable.prototype.onMove;
			dojo.declare("dojo.dnd.TimedMoveable", dojo.dnd.Moveable, {timeout:40, constructor:function (node, params) {
				if (!params) {
					params = {};
				}
				if (params.timeout && typeof params.timeout == "number" && params.timeout >= 0) {
					this.timeout = params.timeout;
				}
			}, markupFactory:function (params, node) {
				return new dojo.dnd.TimedMoveable(node, params);
			}, onMoveStop:function (mover) {
				if (mover._timer) {
					clearTimeout(mover._timer);
					oldOnMove.call(this, mover, mover._leftTop);
				}
				dojo.dnd.Moveable.prototype.onMoveStop.apply(this, arguments);
			}, onMove:function (mover, leftTop) {
				mover._leftTop = leftTop;
				if (!mover._timer) {
					var _t = this;
					mover._timer = setTimeout(function () {
						mover._timer = null;
						oldOnMove.call(_t, mover, mover._leftTop);
					}, this.timeout);
				}
			}});
		})();
	}
	if (!dojo._hasResource["dojo.fx"]) {
		dojo._hasResource["dojo.fx"] = true;
		dojo.provide("dojo.fx");
		dojo.provide("dojo.fx.Toggler");
		(function () {
			var _baseObj = {_fire:function (evt, args) {
				if (this[evt]) {
					this[evt].apply(this, args || []);
				}
				return this;
			}};
			var _chain = function (animations) {
				this._index = -1;
				this._animations = animations || [];
				this._current = this._onAnimateCtx = this._onEndCtx = null;
				this.duration = 0;
				dojo.forEach(this._animations, function (a) {
					this.duration += a.duration;
					if (a.delay) {
						this.duration += a.delay;
					}
				}, this);
			};
			dojo.extend(_chain, {_onAnimate:function () {
				this._fire("onAnimate", arguments);
			}, _onEnd:function () {
				dojo.disconnect(this._onAnimateCtx);
				dojo.disconnect(this._onEndCtx);
				this._onAnimateCtx = this._onEndCtx = null;
				if (this._index + 1 == this._animations.length) {
					this._fire("onEnd");
				} else {
					this._current = this._animations[++this._index];
					this._onAnimateCtx = dojo.connect(this._current, "onAnimate", this, "_onAnimate");
					this._onEndCtx = dojo.connect(this._current, "onEnd", this, "_onEnd");
					this._current.play(0, true);
				}
			}, play:function (delay, gotoStart) {
				if (!this._current) {
					this._current = this._animations[this._index = 0];
				}
				if (!gotoStart && this._current.status() == "playing") {
					return this;
				}
				var beforeBegin = dojo.connect(this._current, "beforeBegin", this, function () {
					this._fire("beforeBegin");
				}), onBegin = dojo.connect(this._current, "onBegin", this, function (arg) {
					this._fire("onBegin", arguments);
				}), onPlay = dojo.connect(this._current, "onPlay", this, function (arg) {
					this._fire("onPlay", arguments);
					dojo.disconnect(beforeBegin);
					dojo.disconnect(onBegin);
					dojo.disconnect(onPlay);
				});
				if (this._onAnimateCtx) {
					dojo.disconnect(this._onAnimateCtx);
				}
				this._onAnimateCtx = dojo.connect(this._current, "onAnimate", this, "_onAnimate");
				if (this._onEndCtx) {
					dojo.disconnect(this._onEndCtx);
				}
				this._onEndCtx = dojo.connect(this._current, "onEnd", this, "_onEnd");
				this._current.play.apply(this._current, arguments);
				return this;
			}, pause:function () {
				if (this._current) {
					var e = dojo.connect(this._current, "onPause", this, function (arg) {
						this._fire("onPause", arguments);
						dojo.disconnect(e);
					});
					this._current.pause();
				}
				return this;
			}, gotoPercent:function (percent, andPlay) {
				this.pause();
				var offset = this.duration * percent;
				this._current = null;
				dojo.some(this._animations, function (a) {
					if (a.duration <= offset) {
						this._current = a;
						return true;
					}
					offset -= a.duration;
					return false;
				});
				if (this._current) {
					this._current.gotoPercent(offset / _current.duration, andPlay);
				}
				return this;
			}, stop:function (gotoEnd) {
				if (this._current) {
					if (gotoEnd) {
						for (; this._index + 1 < this._animations.length; ++this._index) {
							this._animations[this._index].stop(true);
						}
						this._current = this._animations[this._index];
					}
					var e = dojo.connect(this._current, "onStop", this, function (arg) {
						this._fire("onStop", arguments);
						dojo.disconnect(e);
					});
					this._current.stop();
				}
				return this;
			}, status:function () {
				return this._current ? this._current.status() : "stopped";
			}, destroy:function () {
				if (this._onAnimateCtx) {
					dojo.disconnect(this._onAnimateCtx);
				}
				if (this._onEndCtx) {
					dojo.disconnect(this._onEndCtx);
				}
			}});
			dojo.extend(_chain, _baseObj);
			dojo.fx.chain = function (animations) {
				return new _chain(animations);
			};
			var _combine = function (animations) {
				this._animations = animations || [];
				this._connects = [];
				this._finished = 0;
				this.duration = 0;
				dojo.forEach(animations, function (a) {
					var duration = a.duration;
					if (a.delay) {
						duration += a.delay;
					}
					if (this.duration < duration) {
						this.duration = duration;
					}
					this._connects.push(dojo.connect(a, "onEnd", this, "_onEnd"));
				}, this);
				this._pseudoAnimation = new dojo._Animation({curve:[0, 1], duration:this.duration});
				dojo.forEach(["beforeBegin", "onBegin", "onPlay", "onAnimate", "onPause", "onStop"], function (evt) {
					this._connects.push(dojo.connect(this._pseudoAnimation, evt, dojo.hitch(this, "_fire", evt)));
				}, this);
			};
			dojo.extend(_combine, {_doAction:function (action, args) {
				dojo.forEach(this._animations, function (a) {
					a[action].apply(a, args);
				});
				return this;
			}, _onEnd:function () {
				if (++this._finished == this._animations.length) {
					this._fire("onEnd");
				}
			}, _call:function (action, args) {
				var t = this._pseudoAnimation;
				t[action].apply(t, args);
			}, play:function (delay, gotoStart) {
				this._finished = 0;
				this._doAction("play", arguments);
				this._call("play", arguments);
				return this;
			}, pause:function () {
				this._doAction("pause", arguments);
				this._call("pause", arguments);
				return this;
			}, gotoPercent:function (percent, andPlay) {
				var ms = this.duration * percent;
				dojo.forEach(this._animations, function (a) {
					a.gotoPercent(a.duration < ms ? 1 : (ms / a.duration), andPlay);
				});
				this._call("gotoProcent", arguments);
				return this;
			}, stop:function (gotoEnd) {
				this._doAction("stop", arguments);
				this._call("stop", arguments);
				return this;
			}, status:function () {
				return this._pseudoAnimation.status();
			}, destroy:function () {
				dojo.forEach(this._connects, dojo.disconnect);
			}});
			dojo.extend(_combine, _baseObj);
			dojo.fx.combine = function (animations) {
				return new _combine(animations);
			};
		})();
		dojo.declare("dojo.fx.Toggler", null, {constructor:function (args) {
			var _t = this;
			dojo.mixin(_t, args);
			_t.node = args.node;
			_t._showArgs = dojo.mixin({}, args);
			_t._showArgs.node = _t.node;
			_t._showArgs.duration = _t.showDuration;
			_t.showAnim = _t.showFunc(_t._showArgs);
			_t._hideArgs = dojo.mixin({}, args);
			_t._hideArgs.node = _t.node;
			_t._hideArgs.duration = _t.hideDuration;
			_t.hideAnim = _t.hideFunc(_t._hideArgs);
			dojo.connect(_t.showAnim, "beforeBegin", dojo.hitch(_t.hideAnim, "stop", true));
			dojo.connect(_t.hideAnim, "beforeBegin", dojo.hitch(_t.showAnim, "stop", true));
		}, node:null, showFunc:dojo.fadeIn, hideFunc:dojo.fadeOut, showDuration:200, hideDuration:200, show:function (delay) {
			return this.showAnim.play(delay || 0);
		}, hide:function (delay) {
			return this.hideAnim.play(delay || 0);
		}});
		dojo.fx.wipeIn = function (args) {
			args.node = dojo.byId(args.node);
			var node = args.node, s = node.style;
			var anim = dojo.animateProperty(dojo.mixin({properties:{height:{start:function () {
				s.overflow = "hidden";
				if (s.visibility == "hidden" || s.display == "none") {
					s.height = "1px";
					s.display = "";
					s.visibility = "";
					return 1;
				} else {
					var height = dojo.style(node, "height");
					return Math.max(height, 1);
				}
			}, end:function () {
				return node.scrollHeight;
			}}}}, args));
			dojo.connect(anim, "onEnd", function () {
				s.height = "auto";
			});
			return anim;
		};
		dojo.fx.wipeOut = function (args) {
			var node = args.node = dojo.byId(args.node);
			var s = node.style;
			var anim = dojo.animateProperty(dojo.mixin({properties:{height:{end:1}}}, args));
			dojo.connect(anim, "beforeBegin", function () {
				s.overflow = "hidden";
				s.display = "";
			});
			dojo.connect(anim, "onEnd", function () {
				s.height = "auto";
				s.display = "none";
			});
			return anim;
		};
		dojo.fx.slideTo = function (args) {
			var node = (args.node = dojo.byId(args.node));
			var top = null;
			var left = null;
			var init = (function (n) {
				return function () {
					var cs = dojo.getComputedStyle(n);
					var pos = cs.position;
					top = (pos == "absolute" ? n.offsetTop : parseInt(cs.top) || 0);
					left = (pos == "absolute" ? n.offsetLeft : parseInt(cs.left) || 0);
					if (pos != "absolute" && pos != "relative") {
						var ret = dojo.coords(n, true);
						top = ret.y;
						left = ret.x;
						n.style.position = "absolute";
						n.style.top = top + "px";
						n.style.left = left + "px";
					}
				};
			})(node);
			init();
			var anim = dojo.animateProperty(dojo.mixin({properties:{top:{end:args.top || 0}, left:{end:args.left || 0}}}, args));
			dojo.connect(anim, "beforeBegin", anim, init);
			return anim;
		};
	}
	if (!dojo._hasResource["dijit._base.focus"]) {
		dojo._hasResource["dijit._base.focus"] = true;
		dojo.provide("dijit._base.focus");
		dojo.mixin(dijit, {_curFocus:null, _prevFocus:null, isCollapsed:function () {
			var _window = dojo.global;
			var _document = dojo.doc;
			if (_document.selection) {
				return !_document.selection.createRange().text;
			} else {
				var selection = _window.getSelection();
				if (dojo.isString(selection)) {
					return !selection;
				} else {
					return selection.isCollapsed || !selection.toString();
				}
			}
		}, getBookmark:function () {
			var bookmark, selection = dojo.doc.selection;
			if (selection) {
				var range = selection.createRange();
				if (selection.type.toUpperCase() == "CONTROL") {
					if (range.length) {
						bookmark = [];
						var i = 0, len = range.length;
						while (i < len) {
							bookmark.push(range.item(i++));
						}
					} else {
						bookmark = null;
					}
				} else {
					bookmark = range.getBookmark();
				}
			} else {
				if (window.getSelection) {
					selection = dojo.global.getSelection();
					if (selection) {
						range = selection.getRangeAt(0);
						bookmark = range.cloneRange();
					}
				} else {
					console.warn("No idea how to store the current selection for this browser!");
				}
			}
			return bookmark;
		}, moveToBookmark:function (bookmark) {
			var _document = dojo.doc;
			if (_document.selection) {
				var range;
				if (dojo.isArray(bookmark)) {
					range = _document.body.createControlRange();
					dojo.forEach(bookmark, "range.addElement(item)");
				} else {
					range = _document.selection.createRange();
					range.moveToBookmark(bookmark);
				}
				range.select();
			} else {
				var selection = dojo.global.getSelection && dojo.global.getSelection();
				if (selection && selection.removeAllRanges) {
					selection.removeAllRanges();
					selection.addRange(bookmark);
				} else {
					console.warn("No idea how to restore selection for this browser!");
				}
			}
		}, getFocus:function (menu, openedForWindow) {
			return {node:menu && dojo.isDescendant(dijit._curFocus, menu.domNode) ? dijit._prevFocus : dijit._curFocus, bookmark:!dojo.withGlobal(openedForWindow || dojo.global, dijit.isCollapsed) ? dojo.withGlobal(openedForWindow || dojo.global, dijit.getBookmark) : null, openedForWindow:openedForWindow};
		}, focus:function (handle) {
			if (!handle) {
				return;
			}
			var node = "node" in handle ? handle.node : handle, bookmark = handle.bookmark, openedForWindow = handle.openedForWindow;
			if (node) {
				var focusNode = (node.tagName.toLowerCase() == "iframe") ? node.contentWindow : node;
				if (focusNode && focusNode.focus) {
					try {
						focusNode.focus();
					}
					catch (e) {
					}
				}
				dijit._onFocusNode(node);
			}
			if (bookmark && dojo.withGlobal(openedForWindow || dojo.global, dijit.isCollapsed)) {
				if (openedForWindow) {
					openedForWindow.focus();
				}
				try {
					dojo.withGlobal(openedForWindow || dojo.global, dijit.moveToBookmark, null, [bookmark]);
				}
				catch (e) {
				}
			}
		}, _activeStack:[], registerWin:function (targetWindow) {
			if (!targetWindow) {
				targetWindow = window;
			}
			dojo.connect(targetWindow.document, "onmousedown", function (evt) {
				dijit._justMouseDowned = true;
				setTimeout(function () {
					dijit._justMouseDowned = false;
				}, 0);
				dijit._onTouchNode(evt.target || evt.srcElement);
			});
			var body = targetWindow.document.body || targetWindow.document.getElementsByTagName("body")[0];
			if (body) {
				if (dojo.isIE) {
					body.attachEvent("onactivate", function (evt) {
						if (evt.srcElement.tagName.toLowerCase() != "body") {
							dijit._onFocusNode(evt.srcElement);
						}
					});
					body.attachEvent("ondeactivate", function (evt) {
						dijit._onBlurNode(evt.srcElement);
					});
				} else {
					body.addEventListener("focus", function (evt) {
						dijit._onFocusNode(evt.target);
					}, true);
					body.addEventListener("blur", function (evt) {
						dijit._onBlurNode(evt.target);
					}, true);
				}
			}
			body = null;
		}, _onBlurNode:function (node) {
			dijit._prevFocus = dijit._curFocus;
			dijit._curFocus = null;
			if (dijit._justMouseDowned) {
				return;
			}
			if (dijit._clearActiveWidgetsTimer) {
				clearTimeout(dijit._clearActiveWidgetsTimer);
			}
			dijit._clearActiveWidgetsTimer = setTimeout(function () {
				delete dijit._clearActiveWidgetsTimer;
				dijit._setStack([]);
				dijit._prevFocus = null;
			}, 100);
		}, _onTouchNode:function (node) {
			if (dijit._clearActiveWidgetsTimer) {
				clearTimeout(dijit._clearActiveWidgetsTimer);
				delete dijit._clearActiveWidgetsTimer;
			}
			var newStack = [];
			try {
				while (node) {
					if (node.dijitPopupParent) {
						node = dijit.byId(node.dijitPopupParent).domNode;
					} else {
						if (node.tagName && node.tagName.toLowerCase() == "body") {
							if (node === dojo.body()) {
								break;
							}
							node = dijit.getDocumentWindow(node.ownerDocument).frameElement;
						} else {
							var id = node.getAttribute && node.getAttribute("widgetId");
							if (id) {
								newStack.unshift(id);
							}
							node = node.parentNode;
						}
					}
				}
			}
			catch (e) {
			}
			dijit._setStack(newStack);
		}, _onFocusNode:function (node) {
			if (node && node.tagName && node.tagName.toLowerCase() == "body") {
				return;
			}
			dijit._onTouchNode(node);
			if (node == dijit._curFocus) {
				return;
			}
			if (dijit._curFocus) {
				dijit._prevFocus = dijit._curFocus;
			}
			dijit._curFocus = node;
			dojo.publish("focusNode", [node]);
		}, _setStack:function (newStack) {
			var oldStack = dijit._activeStack;
			dijit._activeStack = newStack;
			for (var nCommon = 0; nCommon < Math.min(oldStack.length, newStack.length); nCommon++) {
				if (oldStack[nCommon] != newStack[nCommon]) {
					break;
				}
			}
			for (var i = oldStack.length - 1; i >= nCommon; i--) {
				var widget = dijit.byId(oldStack[i]);
				if (widget) {
					widget._focused = false;
					widget._hasBeenBlurred = true;
					if (widget._onBlur) {
						widget._onBlur();
					}
					if (widget._setStateClass) {
						widget._setStateClass();
					}
					dojo.publish("widgetBlur", [widget]);
				}
			}
			for (i = nCommon; i < newStack.length; i++) {
				widget = dijit.byId(newStack[i]);
				if (widget) {
					widget._focused = true;
					if (widget._onFocus) {
						widget._onFocus();
					}
					if (widget._setStateClass) {
						widget._setStateClass();
					}
					dojo.publish("widgetFocus", [widget]);
				}
			}
		}});
		dojo.addOnLoad(dijit.registerWin);
	}
	if (!dojo._hasResource["dijit._base.manager"]) {
		dojo._hasResource["dijit._base.manager"] = true;
		dojo.provide("dijit._base.manager");
		dojo.declare("dijit.WidgetSet", null, {constructor:function () {
			this._hash = {};
		}, add:function (widget) {
			if (this._hash[widget.id]) {
				throw new Error("Tried to register widget with id==" + widget.id + " but that id is already registered");
			}
			this._hash[widget.id] = widget;
		}, remove:function (id) {
			delete this._hash[id];
		}, forEach:function (func) {
			for (var id in this._hash) {
				func(this._hash[id]);
			}
		}, filter:function (filter) {
			var res = new dijit.WidgetSet();
			this.forEach(function (widget) {
				if (filter(widget)) {
					res.add(widget);
				}
			});
			return res;
		}, byId:function (id) {
			return this._hash[id];
		}, byClass:function (cls) {
			return this.filter(function (widget) {
				return widget.declaredClass == cls;
			});
		}});
		dijit.registry = new dijit.WidgetSet();
		dijit._widgetTypeCtr = {};
		dijit.getUniqueId = function (widgetType) {
			var id;
			do {
				id = widgetType + "_" + (widgetType in dijit._widgetTypeCtr ? ++dijit._widgetTypeCtr[widgetType] : dijit._widgetTypeCtr[widgetType] = 0);
			} while (dijit.byId(id));
			return id;
		};
		if (dojo.isIE) {
			dojo.addOnUnload(function () {
				dijit.registry.forEach(function (widget) {
					widget.destroy();
				});
			});
		}
		dijit.byId = function (id) {
			return (dojo.isString(id)) ? dijit.registry.byId(id) : id;
		};
		dijit.byNode = function (node) {
			return dijit.registry.byId(node.getAttribute("widgetId"));
		};
		dijit.getEnclosingWidget = function (node) {
			while (node) {
				if (node.getAttribute && node.getAttribute("widgetId")) {
					return dijit.registry.byId(node.getAttribute("widgetId"));
				}
				node = node.parentNode;
			}
			return null;
		};
		dijit._tabElements = {area:true, button:true, input:true, object:true, select:true, textarea:true};
		dijit._isElementShown = function (elem) {
			var style = dojo.style(elem);
			return (style.visibility != "hidden") && (style.visibility != "collapsed") && (style.display != "none");
		};
		dijit.isTabNavigable = function (elem) {
			if (dojo.hasAttr(elem, "disabled")) {
				return false;
			}
			var hasTabindex = dojo.hasAttr(elem, "tabindex");
			var tabindex = dojo.attr(elem, "tabindex");
			if (hasTabindex && tabindex >= 0) {
				return true;
			}
			var name = elem.nodeName.toLowerCase();
			if (((name == "a" && dojo.hasAttr(elem, "href")) || dijit._tabElements[name]) && (!hasTabindex || tabindex >= 0)) {
				return true;
			}
			return false;
		};
		dijit._getTabNavigable = function (root) {
			var first, last, lowest, lowestTabindex, highest, highestTabindex;
			var walkTree = function (parent) {
				dojo.query("> *", parent).forEach(function (child) {
					var isShown = dijit._isElementShown(child);
					if (isShown && dijit.isTabNavigable(child)) {
						var tabindex = dojo.attr(child, "tabindex");
						if (!dojo.hasAttr(child, "tabindex") || tabindex == 0) {
							if (!first) {
								first = child;
							}
							last = child;
						} else {
							if (tabindex > 0) {
								if (!lowest || tabindex < lowestTabindex) {
									lowestTabindex = tabindex;
									lowest = child;
								}
								if (!highest || tabindex >= highestTabindex) {
									highestTabindex = tabindex;
									highest = child;
								}
							}
						}
					}
					if (isShown) {
						walkTree(child);
					}
				});
			};
			if (dijit._isElementShown(root)) {
				walkTree(root);
			}
			return {first:first, last:last, lowest:lowest, highest:highest};
		};
		dijit.getFirstInTabbingOrder = function (root) {
			var elems = dijit._getTabNavigable(dojo.byId(root));
			return elems.lowest ? elems.lowest : elems.first;
		};
		dijit.getLastInTabbingOrder = function (root) {
			var elems = dijit._getTabNavigable(dojo.byId(root));
			return elems.last ? elems.last : elems.highest;
		};
	}
	if (!dojo._hasResource["dijit._base.place"]) {
		dojo._hasResource["dijit._base.place"] = true;
		dojo.provide("dijit._base.place");
		dijit.getViewport = function () {
			var _window = dojo.global;
			var _document = dojo.doc;
			var w = 0, h = 0;
			var de = _document.documentElement;
			var dew = de.clientWidth, deh = de.clientHeight;
			if (dojo.isMozilla) {
				var minw, minh, maxw, maxh;
				var dbw = _document.body.clientWidth;
				if (dbw > dew) {
					minw = dew;
					maxw = dbw;
				} else {
					maxw = dew;
					minw = dbw;
				}
				var dbh = _document.body.clientHeight;
				if (dbh > deh) {
					minh = deh;
					maxh = dbh;
				} else {
					maxh = deh;
					minh = dbh;
				}
				w = (maxw > _window.innerWidth) ? minw : maxw;
				h = (maxh > _window.innerHeight) ? minh : maxh;
			} else {
				if (!dojo.isOpera && _window.innerWidth) {
					w = _window.innerWidth;
					h = _window.innerHeight;
				} else {
					if (dojo.isIE && de && deh) {
						w = dew;
						h = deh;
					} else {
						if (dojo.body().clientWidth) {
							w = dojo.body().clientWidth;
							h = dojo.body().clientHeight;
						}
					}
				}
			}
			var scroll = dojo._docScroll();
			return {w:w, h:h, l:scroll.x, t:scroll.y};
		};
		dijit.placeOnScreen = function (node, pos, corners, tryOnly) {
			var choices = dojo.map(corners, function (corner) {
				return {corner:corner, pos:pos};
			});
			return dijit._place(node, choices);
		};
		dijit._place = function (node, choices, layoutNode) {
			var view = dijit.getViewport();
			if (!node.parentNode || String(node.parentNode.tagName).toLowerCase() != "body") {
				dojo.body().appendChild(node);
			}
			var best = null;
			dojo.some(choices, function (choice) {
				var corner = choice.corner;
				var pos = choice.pos;
				if (layoutNode) {
					layoutNode(node, choice.aroundCorner, corner);
				}
				var style = node.style;
				var oldDisplay = style.display;
				var oldVis = style.visibility;
				style.visibility = "hidden";
				style.display = "";
				var mb = dojo.marginBox(node);
				style.display = oldDisplay;
				style.visibility = oldVis;
				var startX = (corner.charAt(1) == "L" ? pos.x : Math.max(view.l, pos.x - mb.w)), startY = (corner.charAt(0) == "T" ? pos.y : Math.max(view.t, pos.y - mb.h)), endX = (corner.charAt(1) == "L" ? Math.min(view.l + view.w, startX + mb.w) : pos.x), endY = (corner.charAt(0) == "T" ? Math.min(view.t + view.h, startY + mb.h) : pos.y), width = endX - startX, height = endY - startY, overflow = (mb.w - width) + (mb.h - height);
				if (best == null || overflow < best.overflow) {
					best = {corner:corner, aroundCorner:choice.aroundCorner, x:startX, y:startY, w:width, h:height, overflow:overflow};
				}
				return !overflow;
			});
			node.style.left = best.x + "px";
			node.style.top = best.y + "px";
			if (best.overflow && layoutNode) {
				layoutNode(node, best.aroundCorner, best.corner);
			}
			return best;
		};
		dijit.placeOnScreenAroundElement = function (node, aroundNode, aroundCorners, layoutNode) {
			aroundNode = dojo.byId(aroundNode);
			var oldDisplay = aroundNode.style.display;
			aroundNode.style.display = "";
			var aroundNodeW = aroundNode.offsetWidth;
			var aroundNodeH = aroundNode.offsetHeight;
			var aroundNodePos = dojo.coords(aroundNode, true);
			aroundNode.style.display = oldDisplay;
			var choices = [];
			for (var nodeCorner in aroundCorners) {
				choices.push({aroundCorner:nodeCorner, corner:aroundCorners[nodeCorner], pos:{x:aroundNodePos.x + (nodeCorner.charAt(1) == "L" ? 0 : aroundNodeW), y:aroundNodePos.y + (nodeCorner.charAt(0) == "T" ? 0 : aroundNodeH)}});
			}
			return dijit._place(node, choices, layoutNode);
		};
	}
	if (!dojo._hasResource["dijit._base.window"]) {
		dojo._hasResource["dijit._base.window"] = true;
		dojo.provide("dijit._base.window");
		dijit.getDocumentWindow = function (doc) {
			if (dojo.isSafari && !doc._parentWindow) {
				var fix = function (win) {
					win.document._parentWindow = win;
					for (var i = 0; i < win.frames.length; i++) {
						fix(win.frames[i]);
					}
				};
				fix(window.top);
			}
			if (dojo.isIE && window !== document.parentWindow && !doc._parentWindow) {
				doc.parentWindow.execScript("document._parentWindow = window;", "Javascript");
				var win = doc._parentWindow;
				doc._parentWindow = null;
				return win;
			}
			return doc._parentWindow || doc.parentWindow || doc.defaultView;
		};
	}
	if (!dojo._hasResource["dijit._base.popup"]) {
		dojo._hasResource["dijit._base.popup"] = true;
		dojo.provide("dijit._base.popup");
		dijit.popup = new function () {
			var stack = [], beginZIndex = 1000, idGen = 1;
			this.prepare = function (node) {
				dojo.body().appendChild(node);
				var s = node.style;
				if (s.display == "none") {
					s.display = "";
				}
				s.visibility = "hidden";
				s.position = "absolute";
				s.top = "-9999px";
			};
			this.open = function (args) {
				var widget = args.popup, orient = args.orient || {"BL":"TL", "TL":"BL"}, around = args.around, id = (args.around && args.around.id) ? (args.around.id + "_dropdown") : ("popup_" + idGen++);
				var wrapper = dojo.doc.createElement("div");
				dijit.setWaiRole(wrapper, "presentation");
				wrapper.id = id;
				wrapper.className = "dijitPopup";
				wrapper.style.zIndex = beginZIndex + stack.length;
				wrapper.style.visibility = "hidden";
				if (args.parent) {
					wrapper.dijitPopupParent = args.parent.id;
				}
				dojo.body().appendChild(wrapper);
				var s = widget.domNode.style;
				s.display = "";
				s.visibility = "";
				s.position = "";
				wrapper.appendChild(widget.domNode);
				var iframe = new dijit.BackgroundIframe(wrapper);
				var best = around ? dijit.placeOnScreenAroundElement(wrapper, around, orient, widget.orient ? dojo.hitch(widget, "orient") : null) : dijit.placeOnScreen(wrapper, args, orient == "R" ? ["TR", "BR", "TL", "BL"] : ["TL", "BL", "TR", "BR"]);
				wrapper.style.visibility = "visible";
				var handlers = [];
				var getTopPopup = function () {
					for (var pi = stack.length - 1; pi > 0 && stack[pi].parent === stack[pi - 1].widget; pi--) {
					}
					return stack[pi];
				};
				handlers.push(dojo.connect(wrapper, "onkeypress", this, function (evt) {
					if (evt.keyCode == dojo.keys.ESCAPE && args.onCancel) {
						dojo.stopEvent(evt);
						args.onCancel();
					} else {
						if (evt.keyCode == dojo.keys.TAB) {
							dojo.stopEvent(evt);
							var topPopup = getTopPopup();
							if (topPopup && topPopup.onCancel) {
								topPopup.onCancel();
							}
						}
					}
				}));
				if (widget.onCancel) {
					handlers.push(dojo.connect(widget, "onCancel", null, args.onCancel));
				}
				handlers.push(dojo.connect(widget, widget.onExecute ? "onExecute" : "onChange", null, function () {
					var topPopup = getTopPopup();
					if (topPopup && topPopup.onExecute) {
						topPopup.onExecute();
					}
				}));
				stack.push({wrapper:wrapper, iframe:iframe, widget:widget, parent:args.parent, onExecute:args.onExecute, onCancel:args.onCancel, onClose:args.onClose, handlers:handlers});
				if (widget.onOpen) {
					widget.onOpen(best);
				}
				return best;
			};
			this.close = function (popup) {
				while (dojo.some(stack, function (elem) {
					return elem.widget == popup;
				})) {
					var top = stack.pop(), wrapper = top.wrapper, iframe = top.iframe, widget = top.widget, onClose = top.onClose;
					if (widget.onClose) {
						widget.onClose();
					}
					dojo.forEach(top.handlers, dojo.disconnect);
					if (!widget || !widget.domNode) {
						return;
					}
					this.prepare(widget.domNode);
					iframe.destroy();
					dojo._destroyElement(wrapper);
					if (onClose) {
						onClose();
					}
				}
			};
		}();
		dijit._frames = new function () {
			var queue = [];
			this.pop = function () {
				var iframe;
				if (queue.length) {
					iframe = queue.pop();
					iframe.style.display = "";
				} else {
					if (dojo.isIE) {
						var html = "<iframe src='javascript:\"\"'" + " style='position: absolute; left: 0px; top: 0px;" + "z-index: -1; filter:Alpha(Opacity=\"0\");'>";
						iframe = dojo.doc.createElement(html);
					} else {
						iframe = dojo.doc.createElement("iframe");
						iframe.src = "javascript:\"\"";
						iframe.className = "dijitBackgroundIframe";
					}
					iframe.tabIndex = -1;
					dojo.body().appendChild(iframe);
				}
				return iframe;
			};
			this.push = function (iframe) {
				iframe.style.display = "";
				if (dojo.isIE) {
					iframe.style.removeExpression("width");
					iframe.style.removeExpression("height");
				}
				queue.push(iframe);
			};
		}();
		if (dojo.isIE && dojo.isIE < 7) {
			dojo.addOnLoad(function () {
				var f = dijit._frames;
				dojo.forEach([f.pop()], f.push);
			});
		}
		dijit.BackgroundIframe = function (node) {
			if (!node.id) {
				throw new Error("no id");
			}
			if ((dojo.isIE && dojo.isIE < 7) || (dojo.isFF && dojo.isFF < 3 && dojo.hasClass(dojo.body(), "dijit_a11y"))) {
				var iframe = dijit._frames.pop();
				node.appendChild(iframe);
				if (dojo.isIE) {
					iframe.style.setExpression("width", dojo._scopeName + ".doc.getElementById('" + node.id + "').offsetWidth");
					iframe.style.setExpression("height", dojo._scopeName + ".doc.getElementById('" + node.id + "').offsetHeight");
				}
				this.iframe = iframe;
			}
		};
		dojo.extend(dijit.BackgroundIframe, {destroy:function () {
			if (this.iframe) {
				dijit._frames.push(this.iframe);
				delete this.iframe;
			}
		}});
	}
	if (!dojo._hasResource["dijit._base.scroll"]) {
		dojo._hasResource["dijit._base.scroll"] = true;
		dojo.provide("dijit._base.scroll");
		dijit.scrollIntoView = function (node) {
			if (dojo.isMozilla) {
				node.scrollIntoView(false);
			} else {
				var parent = node.parentNode;
				var parentBottom = parent.scrollTop + dojo.marginBox(parent).h;
				var nodeBottom = node.offsetTop + dojo.marginBox(node).h;
				if (parentBottom < nodeBottom) {
					parent.scrollTop += (nodeBottom - parentBottom);
				} else {
					if (parent.scrollTop > node.offsetTop) {
						parent.scrollTop -= (parent.scrollTop - node.offsetTop);
					}
				}
			}
		};
	}
	if (!dojo._hasResource["dijit._base.sniff"]) {
		dojo._hasResource["dijit._base.sniff"] = true;
		dojo.provide("dijit._base.sniff");
		(function () {
			var d = dojo;
			var ie = d.isIE;
			var opera = d.isOpera;
			var maj = Math.floor;
			var ff = d.isFF;
			var classes = {dj_ie:ie, dj_ie6:maj(ie) == 6, dj_ie7:maj(ie) == 7, dj_iequirks:ie && d.isQuirks, dj_opera:opera, dj_opera8:maj(opera) == 8, dj_opera9:maj(opera) == 9, dj_khtml:d.isKhtml, dj_safari:d.isSafari, dj_gecko:d.isMozilla, dj_ff2:maj(ff) == 2};
			for (var p in classes) {
				if (classes[p]) {
					var html = dojo.doc.documentElement;
					if (html.className) {
						html.className += " " + p;
					} else {
						html.className = p;
					}
				}
			}
		})();
	}
	if (!dojo._hasResource["dijit._base.bidi"]) {
		dojo._hasResource["dijit._base.bidi"] = true;
		dojo.provide("dijit._base.bidi");
		dojo.addOnLoad(function () {
			if (!dojo._isBodyLtr()) {
				dojo.addClass(dojo.body(), "dijitRtl");
			}
		});
	}
	if (!dojo._hasResource["dijit._base.typematic"]) {
		dojo._hasResource["dijit._base.typematic"] = true;
		dojo.provide("dijit._base.typematic");
		dijit.typematic = {_fireEventAndReload:function () {
			this._timer = null;
			this._callback(++this._count, this._node, this._evt);
			this._currentTimeout = (this._currentTimeout < 0) ? this._initialDelay : ((this._subsequentDelay > 1) ? this._subsequentDelay : Math.round(this._currentTimeout * this._subsequentDelay));
			this._timer = setTimeout(dojo.hitch(this, "_fireEventAndReload"), this._currentTimeout);
		}, trigger:function (evt, _this, node, callback, obj, subsequentDelay, initialDelay) {
			if (obj != this._obj) {
				this.stop();
				this._initialDelay = initialDelay || 500;
				this._subsequentDelay = subsequentDelay || 0.9;
				this._obj = obj;
				this._evt = evt;
				this._node = node;
				this._currentTimeout = -1;
				this._count = -1;
				this._callback = dojo.hitch(_this, callback);
				this._fireEventAndReload();
			}
		}, stop:function () {
			if (this._timer) {
				clearTimeout(this._timer);
				this._timer = null;
			}
			if (this._obj) {
				this._callback(-1, this._node, this._evt);
				this._obj = null;
			}
		}, addKeyListener:function (node, keyObject, _this, callback, subsequentDelay, initialDelay) {
			return [dojo.connect(node, "onkeypress", this, function (evt) {
				if (evt.keyCode == keyObject.keyCode && (!keyObject.charCode || keyObject.charCode == evt.charCode) && (keyObject.ctrlKey === undefined || keyObject.ctrlKey == evt.ctrlKey) && (keyObject.altKey === undefined || keyObject.altKey == evt.ctrlKey) && (keyObject.shiftKey === undefined || keyObject.shiftKey == evt.ctrlKey)) {
					dojo.stopEvent(evt);
					dijit.typematic.trigger(keyObject, _this, node, callback, keyObject, subsequentDelay, initialDelay);
				} else {
					if (dijit.typematic._obj == keyObject) {
						dijit.typematic.stop();
					}
				}
			}), dojo.connect(node, "onkeyup", this, function (evt) {
				if (dijit.typematic._obj == keyObject) {
					dijit.typematic.stop();
				}
			})];
		}, addMouseListener:function (node, _this, callback, subsequentDelay, initialDelay) {
			var dc = dojo.connect;
			return [dc(node, "mousedown", this, function (evt) {
				dojo.stopEvent(evt);
				dijit.typematic.trigger(evt, _this, node, callback, node, subsequentDelay, initialDelay);
			}), dc(node, "mouseup", this, function (evt) {
				dojo.stopEvent(evt);
				dijit.typematic.stop();
			}), dc(node, "mouseout", this, function (evt) {
				dojo.stopEvent(evt);
				dijit.typematic.stop();
			}), dc(node, "mousemove", this, function (evt) {
				dojo.stopEvent(evt);
			}), dc(node, "dblclick", this, function (evt) {
				dojo.stopEvent(evt);
				if (dojo.isIE) {
					dijit.typematic.trigger(evt, _this, node, callback, node, subsequentDelay, initialDelay);
					setTimeout(dojo.hitch(this, dijit.typematic.stop), 50);
				}
			})];
		}, addListener:function (mouseNode, keyNode, keyObject, _this, callback, subsequentDelay, initialDelay) {
			return this.addKeyListener(keyNode, keyObject, _this, callback, subsequentDelay, initialDelay).concat(this.addMouseListener(mouseNode, _this, callback, subsequentDelay, initialDelay));
		}};
	}
	if (!dojo._hasResource["dijit._base.wai"]) {
		dojo._hasResource["dijit._base.wai"] = true;
		dojo.provide("dijit._base.wai");
		dijit.wai = {onload:function () {
			var div = dojo.doc.createElement("div");
			div.id = "a11yTestNode";
			div.style.cssText = "border: 1px solid;" + "border-color:red green;" + "position: absolute;" + "height: 5px;" + "top: -999px;" + "background-image: url(\"" + dojo.moduleUrl("dojo", "resources/blank.gif") + "\");";
			dojo.body().appendChild(div);
			var cs = dojo.getComputedStyle(div);
			if (cs) {
				var bkImg = cs.backgroundImage;
				var needsA11y = (cs.borderTopColor == cs.borderRightColor) || (bkImg != null && (bkImg == "none" || bkImg == "url(invalid-url:)"));
				dojo[needsA11y ? "addClass" : "removeClass"](dojo.body(), "dijit_a11y");
				dojo.body().removeChild(div);
			}
		}};
		if (dojo.isIE || dojo.isMoz) {
			dojo._loaders.unshift(dijit.wai.onload);
		}
		dojo.mixin(dijit, {hasWaiRole:function (elem) {
			return elem.hasAttribute ? elem.hasAttribute("role") : !!elem.getAttribute("role");
		}, getWaiRole:function (elem) {
			var value = elem.getAttribute("role");
			if (value) {
				var prefixEnd = value.indexOf(":");
				return prefixEnd == -1 ? value : value.substring(prefixEnd + 1);
			} else {
				return "";
			}
		}, setWaiRole:function (elem, role) {
			elem.setAttribute("role", (dojo.isFF && dojo.isFF < 3) ? "wairole:" + role : role);
		}, removeWaiRole:function (elem) {
			elem.removeAttribute("role");
		}, hasWaiState:function (elem, state) {
			if (dojo.isFF && dojo.isFF < 3) {
				return elem.hasAttributeNS("http://www.w3.org/2005/07/aaa", state);
			} else {
				return elem.hasAttribute ? elem.hasAttribute("aria-" + state) : !!elem.getAttribute("aria-" + state);
			}
		}, getWaiState:function (elem, state) {
			if (dojo.isFF && dojo.isFF < 3) {
				return elem.getAttributeNS("http://www.w3.org/2005/07/aaa", state);
			} else {
				var value = elem.getAttribute("aria-" + state);
				return value ? value : "";
			}
		}, setWaiState:function (elem, state, value) {
			if (dojo.isFF && dojo.isFF < 3) {
				elem.setAttributeNS("http://www.w3.org/2005/07/aaa", "aaa:" + state, value);
			} else {
				elem.setAttribute("aria-" + state, value);
			}
		}, removeWaiState:function (elem, state) {
			if (dojo.isFF && dojo.isFF < 3) {
				elem.removeAttributeNS("http://www.w3.org/2005/07/aaa", state);
			} else {
				elem.removeAttribute("aria-" + state);
			}
		}});
	}
	if (!dojo._hasResource["dijit._base"]) {
		dojo._hasResource["dijit._base"] = true;
		dojo.provide("dijit._base");
		if (dojo.isSafari) {
			dojo.connect(window, "load", function () {
				window.resizeBy(1, 0);
				setTimeout(function () {
					window.resizeBy(-1, 0);
				}, 10);
			});
		}
	}
	if (!dojo._hasResource["dijit._Widget"]) {
		dojo._hasResource["dijit._Widget"] = true;
		dojo.provide("dijit._Widget");
		dojo.require("dijit._base");
		dojo.declare("dijit._Widget", null, {id:"", lang:"", dir:"", "class":"", style:"", title:"", srcNodeRef:null, domNode:null, attributeMap:{id:"", dir:"", lang:"", "class":"", style:"", title:""}, postscript:function (params, srcNodeRef) {
			this.create(params, srcNodeRef);
		}, create:function (params, srcNodeRef) {
			this.srcNodeRef = dojo.byId(srcNodeRef);
			this._connects = [];
			this._attaches = [];
			if (this.srcNodeRef && (typeof this.srcNodeRef.id == "string")) {
				this.id = this.srcNodeRef.id;
			}
			if (params) {
				this.params = params;
				dojo.mixin(this, params);
			}
			this.postMixInProperties();
			if (!this.id) {
				this.id = dijit.getUniqueId(this.declaredClass.replace(/\./g, "_"));
			}
			dijit.registry.add(this);
			this.buildRendering();
			if (this.domNode) {
				for (var attr in this.attributeMap) {
					var value = this[attr];
					if (typeof value != "object" && ((value !== "" && value !== false) || (params && params[attr]))) {
						this.setAttribute(attr, value);
					}
				}
			}
			if (this.domNode) {
				this.domNode.setAttribute("widgetId", this.id);
			}
			this.postCreate();
			if (this.srcNodeRef && !this.srcNodeRef.parentNode) {
				delete this.srcNodeRef;
			}
		}, postMixInProperties:function () {
		}, buildRendering:function () {
			this.domNode = this.srcNodeRef || dojo.doc.createElement("div");
		}, postCreate:function () {
		}, startup:function () {
			this._started = true;
		}, destroyRecursive:function (finalize) {
			this.destroyDescendants();
			this.destroy();
		}, destroy:function (finalize) {
			this.uninitialize();
			dojo.forEach(this._connects, function (array) {
				dojo.forEach(array, dojo.disconnect);
			});
			dojo.forEach(this._supportingWidgets || [], function (w) {
				w.destroy();
			});
			this.destroyRendering(finalize);
			dijit.registry.remove(this.id);
		}, destroyRendering:function (finalize) {
			if (this.bgIframe) {
				this.bgIframe.destroy();
				delete this.bgIframe;
			}
			if (this.domNode) {
				dojo._destroyElement(this.domNode);
				delete this.domNode;
			}
			if (this.srcNodeRef) {
				dojo._destroyElement(this.srcNodeRef);
				delete this.srcNodeRef;
			}
		}, destroyDescendants:function () {
			dojo.forEach(this.getDescendants(), function (widget) {
				widget.destroy();
			});
		}, uninitialize:function () {
			return false;
		}, onFocus:function () {
		}, onBlur:function () {
		}, _onFocus:function (e) {
			this.onFocus();
		}, _onBlur:function () {
			this.onBlur();
		}, setAttribute:function (attr, value) {
			var mapNode = this[this.attributeMap[attr] || "domNode"];
			this[attr] = value;
			switch (attr) {
			  case "class":
				dojo.addClass(mapNode, value);
				break;
			  case "style":
				if (mapNode.style.cssText) {
					mapNode.style.cssText += "; " + value;
				} else {
					mapNode.style.cssText = value;
				}
				break;
			  default:
				if (/^on[A-Z]/.test(attr)) {
					attr = attr.toLowerCase();
				}
				if (typeof value == "function") {
					value = dojo.hitch(this, value);
				}
				dojo.attr(mapNode, attr, value);
			}
		}, toString:function () {
			return "[Widget " + this.declaredClass + ", " + (this.id || "NO ID") + "]";
		}, getDescendants:function () {
			if (this.containerNode) {
				var list = dojo.query("[widgetId]", this.containerNode);
				return list.map(dijit.byNode);
			} else {
				return [];
			}
		}, nodesWithKeyClick:["input", "button"], connect:function (obj, event, method) {
			var handles = [];
			if (event == "ondijitclick") {
				if (!this.nodesWithKeyClick[obj.nodeName]) {
					handles.push(dojo.connect(obj, "onkeydown", this, function (e) {
						if (e.keyCode == dojo.keys.ENTER) {
							return (dojo.isString(method)) ? this[method](e) : method.call(this, e);
						} else {
							if (e.keyCode == dojo.keys.SPACE) {
								dojo.stopEvent(e);
							}
						}
					}));
					handles.push(dojo.connect(obj, "onkeyup", this, function (e) {
						if (e.keyCode == dojo.keys.SPACE) {
							return dojo.isString(method) ? this[method](e) : method.call(this, e);
						}
					}));
				}
				event = "onclick";
			}
			handles.push(dojo.connect(obj, event, this, method));
			this._connects.push(handles);
			return handles;
		}, disconnect:function (handles) {
			for (var i = 0; i < this._connects.length; i++) {
				if (this._connects[i] == handles) {
					dojo.forEach(handles, dojo.disconnect);
					this._connects.splice(i, 1);
					return;
				}
			}
		}, isLeftToRight:function () {
			if (!("_ltr" in this)) {
				this._ltr = dojo.getComputedStyle(this.domNode).direction != "rtl";
			}
			return this._ltr;
		}, isFocusable:function () {
			return this.focus && (dojo.style(this.domNode, "display") != "none");
		}});
	}
	if (!dojo._hasResource["dijit._Templated"]) {
		dojo._hasResource["dijit._Templated"] = true;
		dojo.provide("dijit._Templated");
		dojo.declare("dijit._Templated", null, {templateNode:null, templateString:null, templatePath:null, widgetsInTemplate:false, containerNode:null, _skipNodeCache:false, _stringRepl:function (tmpl) {
			var className = this.declaredClass, _this = this;
			return dojo.string.substitute(tmpl, this, function (value, key) {
				if (key.charAt(0) == "!") {
					value = _this[key.substr(1)];
				}
				if (typeof value == "undefined") {
					throw new Error(className + " template:" + key);
				}
				if (!value) {
					return "";
				}
				return key.charAt(0) == "!" ? value : value.toString().replace(/"/g, "&quot;");
			}, this);
		}, buildRendering:function () {
			var cached = dijit._Templated.getCachedTemplate(this.templatePath, this.templateString, this._skipNodeCache);
			var node;
			if (dojo.isString(cached)) {
				node = dijit._Templated._createNodesFromText(this._stringRepl(cached))[0];
			} else {
				node = cached.cloneNode(true);
			}
			this._attachTemplateNodes(node);
			var source = this.srcNodeRef;
			if (source && source.parentNode) {
				source.parentNode.replaceChild(node, source);
			}
			this.domNode = node;
			if (this.widgetsInTemplate) {
				var cw = this._supportingWidgets = dojo.parser.parse(node);
				this._attachTemplateNodes(cw, function (n, p) {
					return n[p];
				});
			}
			this._fillContent(source);
		}, _fillContent:function (source) {
			var dest = this.containerNode;
			if (source && dest) {
				while (source.hasChildNodes()) {
					dest.appendChild(source.firstChild);
				}
			}
		}, _attachTemplateNodes:function (rootNode, getAttrFunc) {
			getAttrFunc = getAttrFunc || function (n, p) {
				return n.getAttribute(p);
			};
			var nodes = dojo.isArray(rootNode) ? rootNode : (rootNode.all || rootNode.getElementsByTagName("*"));
			var x = dojo.isArray(rootNode) ? 0 : -1;
			for (; x < nodes.length; x++) {
				var baseNode = (x == -1) ? rootNode : nodes[x];
				if (this.widgetsInTemplate && getAttrFunc(baseNode, "dojoType")) {
					continue;
				}
				var attachPoint = getAttrFunc(baseNode, "dojoAttachPoint");
				if (attachPoint) {
					var point, points = attachPoint.split(/\s*,\s*/);
					while ((point = points.shift())) {
						if (dojo.isArray(this[point])) {
							this[point].push(baseNode);
						} else {
							this[point] = baseNode;
						}
					}
				}
				var attachEvent = getAttrFunc(baseNode, "dojoAttachEvent");
				if (attachEvent) {
					var event, events = attachEvent.split(/\s*,\s*/);
					var trim = dojo.trim;
					while ((event = events.shift())) {
						if (event) {
							var thisFunc = null;
							if (event.indexOf(":") != -1) {
								var funcNameArr = event.split(":");
								event = trim(funcNameArr[0]);
								thisFunc = trim(funcNameArr[1]);
							} else {
								event = trim(event);
							}
							if (!thisFunc) {
								thisFunc = event;
							}
							this.connect(baseNode, event, thisFunc);
						}
					}
				}
				var role = getAttrFunc(baseNode, "waiRole");
				if (role) {
					dijit.setWaiRole(baseNode, role);
				}
				var values = getAttrFunc(baseNode, "waiState");
				if (values) {
					dojo.forEach(values.split(/\s*,\s*/), function (stateValue) {
						if (stateValue.indexOf("-") != -1) {
							var pair = stateValue.split("-");
							dijit.setWaiState(baseNode, pair[0], pair[1]);
						}
					});
				}
			}
		}});
		dijit._Templated._templateCache = {};
		dijit._Templated.getCachedTemplate = function (templatePath, templateString, alwaysUseString) {
			var tmplts = dijit._Templated._templateCache;
			var key = templateString || templatePath;
			var cached = tmplts[key];
			if (cached) {
				return cached;
			}
			if (!templateString) {
				templateString = dijit._Templated._sanitizeTemplateString(dojo._getText(templatePath));
			}
			templateString = dojo.string.trim(templateString);
			if (alwaysUseString || templateString.match(/\$\{([^\}]+)\}/g)) {
				return (tmplts[key] = templateString);
			} else {
				return (tmplts[key] = dijit._Templated._createNodesFromText(templateString)[0]);
			}
		};
		dijit._Templated._sanitizeTemplateString = function (tString) {
			if (tString) {
				tString = tString.replace(/^\s*<\?xml(\s)+version=[\'\"](\d)*.(\d)*[\'\"](\s)*\?>/im, "");
				var matches = tString.match(/<body[^>]*>\s*([\s\S]+)\s*<\/body>/im);
				if (matches) {
					tString = matches[1];
				}
			} else {
				tString = "";
			}
			return tString;
		};
		if (dojo.isIE) {
			dojo.addOnUnload(function () {
				var cache = dijit._Templated._templateCache;
				for (var key in cache) {
					var value = cache[key];
					if (!isNaN(value.nodeType)) {
						dojo._destroyElement(value);
					}
					delete cache[key];
				}
			});
		}
		(function () {
			var tagMap = {cell:{re:/^<t[dh][\s\r\n>]/i, pre:"<table><tbody><tr>", post:"</tr></tbody></table>"}, row:{re:/^<tr[\s\r\n>]/i, pre:"<table><tbody>", post:"</tbody></table>"}, section:{re:/^<(thead|tbody|tfoot)[\s\r\n>]/i, pre:"<table>", post:"</table>"}};
			var tn;
			dijit._Templated._createNodesFromText = function (text) {
				if (!tn) {
					tn = dojo.doc.createElement("div");
					tn.style.display = "none";
					dojo.body().appendChild(tn);
				}
				var tableType = "none";
				var rtext = text.replace(/^\s+/, "");
				for (var type in tagMap) {
					var map = tagMap[type];
					if (map.re.test(rtext)) {
						tableType = type;
						text = map.pre + text + map.post;
						break;
					}
				}
				tn.innerHTML = text;
				if (tn.normalize) {
					tn.normalize();
				}
				var tag = {cell:"tr", row:"tbody", section:"table"}[tableType];
				var _parent = (typeof tag != "undefined") ? tn.getElementsByTagName(tag)[0] : tn;
				var nodes = [];
				while (_parent.firstChild) {
					nodes.push(_parent.removeChild(_parent.firstChild));
				}
				tn.innerHTML = "";
				return nodes;
			};
		})();
		dojo.extend(dijit._Widget, {dojoAttachEvent:"", dojoAttachPoint:"", waiRole:"", waiState:""});
	}
	if (!dojo._hasResource["dijit._Container"]) {
		dojo._hasResource["dijit._Container"] = true;
		dojo.provide("dijit._Container");
		dojo.declare("dijit._Contained", null, {getParent:function () {
			for (var p = this.domNode.parentNode; p; p = p.parentNode) {
				var id = p.getAttribute && p.getAttribute("widgetId");
				if (id) {
					var parent = dijit.byId(id);
					return parent.isContainer ? parent : null;
				}
			}
			return null;
		}, _getSibling:function (which) {
			var node = this.domNode;
			do {
				node = node[which + "Sibling"];
			} while (node && node.nodeType != 1);
			if (!node) {
				return null;
			}
			var id = node.getAttribute("widgetId");
			return dijit.byId(id);
		}, getPreviousSibling:function () {
			return this._getSibling("previous");
		}, getNextSibling:function () {
			return this._getSibling("next");
		}});
		dojo.declare("dijit._Container", null, {isContainer:true, addChild:function (widget, insertIndex) {
			if (insertIndex === undefined) {
				insertIndex = "last";
			}
			var refNode = this.containerNode || this.domNode;
			if (insertIndex && typeof insertIndex == "number") {
				var children = dojo.query("> [widgetid]", refNode);
				if (children && children.length >= insertIndex) {
					refNode = children[insertIndex - 1];
					insertIndex = "after";
				}
			}
			dojo.place(widget.domNode, refNode, insertIndex);
			if (this._started && !widget._started) {
				widget.startup();
			}
		}, removeChild:function (widget) {
			var node = widget.domNode;
			node.parentNode.removeChild(node);
		}, _nextElement:function (node) {
			do {
				node = node.nextSibling;
			} while (node && node.nodeType != 1);
			return node;
		}, _firstElement:function (node) {
			node = node.firstChild;
			if (node && node.nodeType != 1) {
				node = this._nextElement(node);
			}
			return node;
		}, getChildren:function () {
			return dojo.query("> [widgetId]", this.containerNode || this.domNode).map(dijit.byNode);
		}, hasChildren:function () {
			var cn = this.containerNode || this.domNode;
			return !!this._firstElement(cn);
		}, _getSiblingOfChild:function (child, dir) {
			var node = child.domNode;
			var which = (dir > 0 ? "nextSibling" : "previousSibling");
			do {
				node = node[which];
			} while (node && (node.nodeType != 1 || !dijit.byNode(node)));
			return node ? dijit.byNode(node) : null;
		}});
		dojo.declare("dijit._KeyNavContainer", [dijit._Container], {_keyNavCodes:{}, connectKeyNavHandlers:function (prevKeyCodes, nextKeyCodes) {
			var keyCodes = this._keyNavCodes = {};
			var prev = dojo.hitch(this, this.focusPrev);
			var next = dojo.hitch(this, this.focusNext);
			dojo.forEach(prevKeyCodes, function (code) {
				keyCodes[code] = prev;
			});
			dojo.forEach(nextKeyCodes, function (code) {
				keyCodes[code] = next;
			});
			this.connect(this.domNode, "onkeypress", "_onContainerKeypress");
			this.connect(this.domNode, "onfocus", "_onContainerFocus");
		}, startupKeyNavChildren:function () {
			dojo.forEach(this.getChildren(), dojo.hitch(this, "_startupChild"));
		}, addChild:function (widget, insertIndex) {
			dijit._KeyNavContainer.superclass.addChild.apply(this, arguments);
			this._startupChild(widget);
		}, focus:function () {
			this.focusFirstChild();
		}, focusFirstChild:function () {
			this.focusChild(this._getFirstFocusableChild());
		}, focusNext:function () {
			if (this.focusedChild && this.focusedChild.hasNextFocalNode && this.focusedChild.hasNextFocalNode()) {
				this.focusedChild.focusNext();
				return;
			}
			var child = this._getNextFocusableChild(this.focusedChild, 1);
			if (child.getFocalNodes) {
				this.focusChild(child, child.getFocalNodes()[0]);
			} else {
				this.focusChild(child);
			}
		}, focusPrev:function () {
			if (this.focusedChild && this.focusedChild.hasPrevFocalNode && this.focusedChild.hasPrevFocalNode()) {
				this.focusedChild.focusPrev();
				return;
			}
			var child = this._getNextFocusableChild(this.focusedChild, -1);
			if (child.getFocalNodes) {
				var nodes = child.getFocalNodes();
				this.focusChild(child, nodes[nodes.length - 1]);
			} else {
				this.focusChild(child);
			}
		}, focusChild:function (widget, node) {
			if (widget) {
				if (this.focusedChild && widget !== this.focusedChild) {
					this._onChildBlur(this.focusedChild);
				}
				this.focusedChild = widget;
				if (node && widget.focusFocalNode) {
					widget.focusFocalNode(node);
				} else {
					widget.focus();
				}
			}
		}, _startupChild:function (widget) {
			if (widget.getFocalNodes) {
				dojo.forEach(widget.getFocalNodes(), function (node) {
					dojo.attr(node, "tabindex", -1);
					this._connectNode(node);
				}, this);
			} else {
				var node = widget.focusNode || widget.domNode;
				if (widget.isFocusable()) {
					dojo.attr(node, "tabindex", -1);
				}
				this._connectNode(node);
			}
		}, _connectNode:function (node) {
			this.connect(node, "onfocus", "_onNodeFocus");
			this.connect(node, "onblur", "_onNodeBlur");
		}, _onContainerFocus:function (evt) {
			if (evt.target === this.domNode) {
				this.focusFirstChild();
			}
		}, _onContainerKeypress:function (evt) {
			if (evt.ctrlKey || evt.altKey) {
				return;
			}
			var func = this._keyNavCodes[evt.keyCode];
			if (func) {
				func();
				dojo.stopEvent(evt);
			}
		}, _onNodeFocus:function (evt) {
			dojo.attr(this.domNode, "tabindex", -1);
			var widget = dijit.getEnclosingWidget(evt.target);
			if (widget && widget.isFocusable()) {
				this.focusedChild = widget;
			}
			dojo.stopEvent(evt);
		}, _onNodeBlur:function (evt) {
			if (this.tabIndex) {
				dojo.attr(this.domNode, "tabindex", this.tabIndex);
			}
			dojo.stopEvent(evt);
		}, _onChildBlur:function (widget) {
		}, _getFirstFocusableChild:function () {
			return this._getNextFocusableChild(null, 1);
		}, _getNextFocusableChild:function (child, dir) {
			if (child) {
				child = this._getSiblingOfChild(child, dir);
			}
			var children = this.getChildren();
			for (var i = 0; i < children.length; i++) {
				if (!child) {
					child = children[(dir > 0) ? 0 : (children.length - 1)];
				}
				if (child.isFocusable()) {
					return child;
				}
				child = this._getSiblingOfChild(child, dir);
			}
			return null;
		}});
	}
	if (!dojo._hasResource["dijit.layout._LayoutWidget"]) {
		dojo._hasResource["dijit.layout._LayoutWidget"] = true;
		dojo.provide("dijit.layout._LayoutWidget");
		dojo.declare("dijit.layout._LayoutWidget", [dijit._Widget, dijit._Container, dijit._Contained], {isLayoutContainer:true, postCreate:function () {
			dojo.addClass(this.domNode, "dijitContainer");
		}, startup:function () {
			if (this._started) {
				return;
			}
			dojo.forEach(this.getChildren(), function (child) {
				child.startup();
			});
			if (!this.getParent || !this.getParent()) {
				this.resize();
				this.connect(window, "onresize", function () {
					this.resize();
				});
			}
			this.inherited(arguments);
		}, resize:function (args) {
			var node = this.domNode;
			if (args) {
				dojo.marginBox(node, args);
				if (args.t) {
					node.style.top = args.t + "px";
				}
				if (args.l) {
					node.style.left = args.l + "px";
				}
			}
			var mb = dojo.mixin(dojo.marginBox(node), args || {});
			this._contentBox = dijit.layout.marginBox2contentBox(node, mb);
			this.layout();
		}, layout:function () {
		}});
		dijit.layout.marginBox2contentBox = function (node, mb) {
			var cs = dojo.getComputedStyle(node);
			var me = dojo._getMarginExtents(node, cs);
			var pb = dojo._getPadBorderExtents(node, cs);
			return {l:dojo._toPixelValue(node, cs.paddingLeft), t:dojo._toPixelValue(node, cs.paddingTop), w:mb.w - (me.w + pb.w), h:mb.h - (me.h + pb.h)};
		};
		(function () {
			var capitalize = function (word) {
				return word.substring(0, 1).toUpperCase() + word.substring(1);
			};
			var size = function (widget, dim) {
				widget.resize ? widget.resize(dim) : dojo.marginBox(widget.domNode, dim);
				dojo.mixin(widget, dojo.marginBox(widget.domNode));
				dojo.mixin(widget, dim);
			};
			dijit.layout.layoutChildren = function (container, dim, children) {
				dim = dojo.mixin({}, dim);
				dojo.addClass(container, "dijitLayoutContainer");
				children = dojo.filter(children, function (item) {
					return item.layoutAlign != "client";
				}).concat(dojo.filter(children, function (item) {
					return item.layoutAlign == "client";
				}));
				dojo.forEach(children, function (child) {
					var elm = child.domNode, pos = child.layoutAlign;
					var elmStyle = elm.style;
					elmStyle.left = dim.l + "px";
					elmStyle.top = dim.t + "px";
					elmStyle.bottom = elmStyle.right = "auto";
					dojo.addClass(elm, "dijitAlign" + capitalize(pos));
					if (pos == "top" || pos == "bottom") {
						size(child, {w:dim.w});
						dim.h -= child.h;
						if (pos == "top") {
							dim.t += child.h;
						} else {
							elmStyle.top = dim.t + dim.h + "px";
						}
					} else {
						if (pos == "left" || pos == "right") {
							size(child, {h:dim.h});
							dim.w -= child.w;
							if (pos == "left") {
								dim.l += child.w;
							} else {
								elmStyle.left = dim.l + dim.w + "px";
							}
						} else {
							if (pos == "client") {
								size(child, dim);
							}
						}
					}
				});
			};
		})();
	}
	if (!dojo._hasResource["dijit.layout.ContentPane"]) {
		dojo._hasResource["dijit.layout.ContentPane"] = true;
		dojo.provide("dijit.layout.ContentPane");
		dojo.declare("dijit.layout.ContentPane", dijit._Widget, {href:"", extractContent:false, parseOnLoad:true, preventCache:false, preload:false, refreshOnShow:false, loadingMessage:"<span class='dijitContentPaneLoading'>${loadingState}</span>", errorMessage:"<span class='dijitContentPaneError'>${errorState}</span>", isLoaded:false, "class":"dijitContentPane", doLayout:"auto", postCreate:function () {
			this.domNode.title = "";
			if (!this.containerNode) {
				this.containerNode = this.domNode;
			}
			if (this.preload) {
				this._loadCheck();
			}
			var messages = dojo.i18n.getLocalization("dijit", "loading", this.lang);
			this.loadingMessage = dojo.string.substitute(this.loadingMessage, messages);
			this.errorMessage = dojo.string.substitute(this.errorMessage, messages);
			var curRole = dijit.getWaiRole(this.domNode);
			if (!curRole) {
				dijit.setWaiRole(this.domNode, "group");
			}
			dojo.addClass(this.domNode, this["class"]);
		}, startup:function () {
			if (this._started) {
				return;
			}
			if (this.doLayout != "false" && this.doLayout !== false) {
				this._checkIfSingleChild();
				if (this._singleChild) {
					this._singleChild.startup();
				}
			}
			this._loadCheck();
			this.inherited(arguments);
		}, _checkIfSingleChild:function () {
			var childNodes = dojo.query(">", this.containerNode || this.domNode), childWidgets = childNodes.filter("[widgetId]");
			if (childNodes.length == 1 && childWidgets.length == 1) {
				this.isContainer = true;
				this._singleChild = dijit.byNode(childWidgets[0]);
			} else {
				delete this.isContainer;
				delete this._singleChild;
			}
		}, refresh:function () {
			return this._prepareLoad(true);
		}, setHref:function (href) {
			this.href = href;
			return this._prepareLoad();
		}, setContent:function (data) {
			if (!this._isDownloaded) {
				this.href = "";
				this._onUnloadHandler();
			}
			this._setContent(data || "");
			this._isDownloaded = false;
			if (this.parseOnLoad) {
				this._createSubWidgets();
			}
			if (this.doLayout != "false" && this.doLayout !== false) {
				this._checkIfSingleChild();
				if (this._singleChild && this._singleChild.resize) {
					this._singleChild.startup();
					this._singleChild.resize(this._contentBox || dojo.contentBox(this.containerNode || this.domNode));
				}
			}
			this._onLoadHandler();
		}, cancel:function () {
			if (this._xhrDfd && (this._xhrDfd.fired == -1)) {
				this._xhrDfd.cancel();
			}
			delete this._xhrDfd;
		}, destroy:function () {
			if (this._beingDestroyed) {
				return;
			}
			this._onUnloadHandler();
			this._beingDestroyed = true;
			this.inherited("destroy", arguments);
		}, resize:function (size) {
			dojo.marginBox(this.domNode, size);
			var node = this.containerNode || this.domNode, mb = dojo.mixin(dojo.marginBox(node), size || {});
			this._contentBox = dijit.layout.marginBox2contentBox(node, mb);
			if (this._singleChild && this._singleChild.resize) {
				this._singleChild.resize(this._contentBox);
			}
		}, _prepareLoad:function (forceLoad) {
			this.cancel();
			this.isLoaded = false;
			this._loadCheck(forceLoad);
		}, _isShown:function () {
			if ("open" in this) {
				return this.open;
			} else {
				var node = this.domNode;
				return (node.style.display != "none") && (node.style.visibility != "hidden");
			}
		}, _loadCheck:function (forceLoad) {
			var displayState = this._isShown();
			if (this.href && (forceLoad || (this.preload && !this._xhrDfd) || (this.refreshOnShow && displayState && !this._xhrDfd) || (!this.isLoaded && displayState && !this._xhrDfd))) {
				this._downloadExternalContent();
			}
		}, _downloadExternalContent:function () {
			this._onUnloadHandler();
			this._setContent(this.onDownloadStart.call(this));
			var self = this;
			var getArgs = {preventCache:(this.preventCache || this.refreshOnShow), url:this.href, handleAs:"text"};
			if (dojo.isObject(this.ioArgs)) {
				dojo.mixin(getArgs, this.ioArgs);
			}
			var hand = this._xhrDfd = (this.ioMethod || dojo.xhrGet)(getArgs);
			hand.addCallback(function (html) {
				try {
					self.onDownloadEnd.call(self);
					self._isDownloaded = true;
					self.setContent.call(self, html);
				}
				catch (err) {
					self._onError.call(self, "Content", err);
				}
				delete self._xhrDfd;
				return html;
			});
			hand.addErrback(function (err) {
				if (!hand.cancelled) {
					self._onError.call(self, "Download", err);
				}
				delete self._xhrDfd;
				return err;
			});
		}, _onLoadHandler:function () {
			this.isLoaded = true;
			try {
				this.onLoad.call(this);
			}
			catch (e) {
				console.error("Error " + this.widgetId + " running custom onLoad code");
			}
		}, _onUnloadHandler:function () {
			this.isLoaded = false;
			this.cancel();
			try {
				this.onUnload.call(this);
			}
			catch (e) {
				console.error("Error " + this.widgetId + " running custom onUnload code");
			}
		}, _setContent:function (cont) {
			this.destroyDescendants();
			try {
				var node = this.containerNode || this.domNode;
				while (node.firstChild) {
					dojo._destroyElement(node.firstChild);
				}
				if (typeof cont == "string") {
					if (this.extractContent) {
						match = cont.match(/<body[^>]*>\s*([\s\S]+)\s*<\/body>/im);
						if (match) {
							cont = match[1];
						}
					}
					node.innerHTML = cont;
				} else {
					if (cont.nodeType) {
						node.appendChild(cont);
					} else {
						dojo.forEach(cont, function (n) {
							node.appendChild(n.cloneNode(true));
						});
					}
				}
			}
			catch (e) {
				var errMess = this.onContentError(e);
				try {
					node.innerHTML = errMess;
				}
				catch (e) {
					console.error("Fatal " + this.id + " could not change content due to " + e.message, e);
				}
			}
		}, _onError:function (type, err, consoleText) {
			var errText = this["on" + type + "Error"].call(this, err);
			if (consoleText) {
				console.error(consoleText, err);
			} else {
				if (errText) {
					this._setContent.call(this, errText);
				}
			}
		}, _createSubWidgets:function () {
			var rootNode = this.containerNode || this.domNode;
			try {
				dojo.parser.parse(rootNode, true);
			}
			catch (e) {
				this._onError("Content", e, "Couldn't create widgets in " + this.id + (this.href ? " from " + this.href : ""));
			}
		}, onLoad:function (e) {
		}, onUnload:function (e) {
		}, onDownloadStart:function () {
			return this.loadingMessage;
		}, onContentError:function (error) {
		}, onDownloadError:function (error) {
			return this.errorMessage;
		}, onDownloadEnd:function () {
		}});
	}
	if (!dojo._hasResource["dijit.form.Form"]) {
		dojo._hasResource["dijit.form.Form"] = true;
		dojo.provide("dijit.form.Form");
		dojo.declare("dijit.form._FormMixin", null, {reset:function () {
			dojo.forEach(this.getDescendants(), function (widget) {
				if (widget.reset) {
					widget.reset();
				}
			});
		}, validate:function () {
			var didFocus = false;
			return dojo.every(dojo.map(this.getDescendants(), function (widget) {
				widget._hasBeenBlurred = true;
				var valid = !widget.validate || widget.validate();
				if (!valid && !didFocus) {
					dijit.scrollIntoView(widget.containerNode || widget.domNode);
					widget.focus();
					didFocus = true;
				}
				return valid;
			}), "return item;");
		}, setValues:function (obj) {
			var map = {};
			dojo.forEach(this.getDescendants(), function (widget) {
				if (!widget.name) {
					return;
				}
				var entry = map[widget.name] || (map[widget.name] = []);
				entry.push(widget);
			});
			for (var name in map) {
				var widgets = map[name], values = dojo.getObject(name, false, obj);
				if (!dojo.isArray(values)) {
					values = [values];
				}
				if (typeof widgets[0].checked == "boolean") {
					dojo.forEach(widgets, function (w, i) {
						w.setValue(dojo.indexOf(values, w.value) != -1);
					});
				} else {
					if (widgets[0]._multiValue) {
						widgets[0].setValue(values);
					} else {
						dojo.forEach(widgets, function (w, i) {
							w.setValue(values[i]);
						});
					}
				}
			}
		}, getValues:function () {
			var obj = {};
			dojo.forEach(this.getDescendants(), function (widget) {
				var name = widget.name;
				if (!name) {
					return;
				}
				var value = (widget.getValue && !widget._getValueDeprecated) ? widget.getValue() : widget.value;
				if (typeof widget.checked == "boolean") {
					if (/Radio/.test(widget.declaredClass)) {
						if (value !== false) {
							dojo.setObject(name, value, obj);
						}
					} else {
						var ary = dojo.getObject(name, false, obj);
						if (!ary) {
							ary = [];
							dojo.setObject(name, ary, obj);
						}
						if (value !== false) {
							ary.push(value);
						}
					}
				} else {
					dojo.setObject(name, value, obj);
				}
			});
			return obj;
		}, isValid:function () {
			return dojo.every(this.getDescendants(), function (widget) {
				return !widget.isValid || widget.isValid();
			});
		}});
		dojo.declare("dijit.form.Form", [dijit._Widget, dijit._Templated, dijit.form._FormMixin], {name:"", action:"", method:"", encType:"", "accept-charset":"", accept:"", target:"", templateString:"<form dojoAttachPoint='containerNode' dojoAttachEvent='onreset:_onReset,onsubmit:_onSubmit' name='${name}'></form>", attributeMap:dojo.mixin(dojo.clone(dijit._Widget.prototype.attributeMap), {action:"", method:"", encType:"", "accept-charset":"", accept:"", target:""}), execute:function (formContents) {
		}, onExecute:function () {
		}, setAttribute:function (attr, value) {
			this.inherited(arguments);
			switch (attr) {
			  case "encType":
				if (dojo.isIE) {
					this.domNode.encoding = value;
				}
			}
		}, postCreate:function () {
			if (dojo.isIE && this.srcNodeRef && this.srcNodeRef.attributes) {
				var item = this.srcNodeRef.attributes.getNamedItem("encType");
				if (item && !item.specified && (typeof item.value == "string")) {
					this.setAttribute("encType", item.value);
				}
			}
			this.inherited(arguments);
		}, onReset:function (e) {
			return true;
		}, _onReset:function (e) {
			var faux = {returnValue:true, preventDefault:function () {
				this.returnValue = false;
			}, stopPropagation:function () {
			}, currentTarget:e.currentTarget, target:e.target};
			if (!(this.onReset(faux) === false) && faux.returnValue) {
				this.reset();
			}
			dojo.stopEvent(e);
			return false;
		}, _onSubmit:function (e) {
			var fp = dijit.form.Form.prototype;
			if (this.execute != fp.execute || this.onExecute != fp.onExecute) {
				dojo.deprecated("dijit.form.Form:execute()/onExecute() are deprecated. Use onSubmit() instead.", "", "2.0");
				this.onExecute();
				this.execute(this.getValues());
			}
			if (this.onSubmit(e) === false) {
				dojo.stopEvent(e);
			}
		}, onSubmit:function (e) {
			return this.isValid();
		}, submit:function () {
			if (!(this.onSubmit() === false)) {
				this.containerNode.submit();
			}
		}});
	}
	if (!dojo._hasResource["dijit.Dialog"]) {
		dojo._hasResource["dijit.Dialog"] = true;
		dojo.provide("dijit.Dialog");
		dojo.declare("dijit.DialogUnderlay", [dijit._Widget, dijit._Templated], {templateString:"<div class='dijitDialogUnderlayWrapper' id='${id}_wrapper'><div class='dijitDialogUnderlay ${class}' id='${id}' dojoAttachPoint='node'></div></div>", attributeMap:{}, postCreate:function () {
			dojo.body().appendChild(this.domNode);
			this.bgIframe = new dijit.BackgroundIframe(this.domNode);
		}, layout:function () {
			var viewport = dijit.getViewport();
			var is = this.node.style, os = this.domNode.style;
			os.top = viewport.t + "px";
			os.left = viewport.l + "px";
			is.width = viewport.w + "px";
			is.height = viewport.h + "px";
			var viewport2 = dijit.getViewport();
			if (viewport.w != viewport2.w) {
				is.width = viewport2.w + "px";
			}
			if (viewport.h != viewport2.h) {
				is.height = viewport2.h + "px";
			}
		}, show:function () {
			this.domNode.style.display = "block";
			this.layout();
			if (this.bgIframe.iframe) {
				this.bgIframe.iframe.style.display = "block";
			}
			this._resizeHandler = this.connect(window, "onresize", "layout");
		}, hide:function () {
			this.domNode.style.display = "none";
			if (this.bgIframe.iframe) {
				this.bgIframe.iframe.style.display = "none";
			}
			this.disconnect(this._resizeHandler);
		}, uninitialize:function () {
			if (this.bgIframe) {
				this.bgIframe.destroy();
			}
		}});
		dojo.declare("dijit._DialogMixin", null, {attributeMap:dijit._Widget.prototype.attributeMap, execute:function (formContents) {
		}, onCancel:function () {
		}, onExecute:function () {
		}, _onSubmit:function () {
			this.onExecute();
			this.execute(this.getValues());
		}, _getFocusItems:function (dialogNode) {
			var focusItem = dijit.getFirstInTabbingOrder(dialogNode);
			this._firstFocusItem = focusItem ? focusItem : dialogNode;
			focusItem = dijit.getLastInTabbingOrder(dialogNode);
			this._lastFocusItem = focusItem ? focusItem : this._firstFocusItem;
			if (dojo.isMoz && this._firstFocusItem.tagName.toLowerCase() == "input" && dojo.attr(this._firstFocusItem, "type").toLowerCase() == "file") {
				dojo.attr(dialogNode, "tabindex", "0");
				this._firstFocusItem = dialogNode;
			}
		}});
		dojo.declare("dijit.Dialog", [dijit.layout.ContentPane, dijit._Templated, dijit.form._FormMixin, dijit._DialogMixin], {templateString:null, templateString:"<div class=\"dijitDialog\" tabindex=\"-1\" waiRole=\"dialog\" waiState=\"labelledby-${id}_title\">\n\t<div dojoAttachPoint=\"titleBar\" class=\"dijitDialogTitleBar\">\n\t<span dojoAttachPoint=\"titleNode\" class=\"dijitDialogTitle\" id=\"${id}_title\">${title}</span>\n\t<span dojoAttachPoint=\"closeButtonNode\" class=\"dijitDialogCloseIcon\" dojoAttachEvent=\"onclick: onCancel\">\n\t\t<span dojoAttachPoint=\"closeText\" class=\"closeText\">x</span>\n\t</span>\n\t</div>\n\t\t<div dojoAttachPoint=\"containerNode\" class=\"dijitDialogPaneContent\"></div>\n</div>\n", open:false, duration:400, refocus:true, _firstFocusItem:null, _lastFocusItem:null, doLayout:false, attributeMap:dojo.mixin(dojo.clone(dijit._Widget.prototype.attributeMap), {title:"titleBar"}), postCreate:function () {
			dojo.body().appendChild(this.domNode);
			this.inherited(arguments);
			var _nlsResources = dojo.i18n.getLocalization("dijit", "common");
			if (this.closeButtonNode) {
				this.closeButtonNode.setAttribute("title", _nlsResources.buttonCancel);
			}
			if (this.closeText) {
				this.closeText.setAttribute("title", _nlsResources.buttonCancel);
			}
			var s = this.domNode.style;
			s.visibility = "hidden";
			s.position = "absolute";
			s.display = "";
			s.top = "-9999px";
			this.connect(this, "onExecute", "hide");
			this.connect(this, "onCancel", "hide");
			this._modalconnects = [];
		}, onLoad:function () {
			this._position();
			this.inherited(arguments);
		}, _setup:function () {
			if (this.titleBar) {
				this._moveable = new dojo.dnd.TimedMoveable(this.domNode, {handle:this.titleBar, timeout:0});
			}
			this._underlay = new dijit.DialogUnderlay({id:this.id + "_underlay", "class":dojo.map(this["class"].split(/\s/), function (s) {
				return s + "_underlay";
			}).join(" ")});
			var node = this.domNode;
			this._fadeIn = dojo.fx.combine([dojo.fadeIn({node:node, duration:this.duration}), dojo.fadeIn({node:this._underlay.domNode, duration:this.duration, onBegin:dojo.hitch(this._underlay, "show")})]);
			this._fadeOut = dojo.fx.combine([dojo.fadeOut({node:node, duration:this.duration, onEnd:function () {
				node.style.visibility = "hidden";
				node.style.top = "-9999px";
			}}), dojo.fadeOut({node:this._underlay.domNode, duration:this.duration, onEnd:dojo.hitch(this._underlay, "hide")})]);
		}, uninitialize:function () {
			if (this._fadeIn && this._fadeIn.status() == "playing") {
				this._fadeIn.stop();
			}
			if (this._fadeOut && this._fadeOut.status() == "playing") {
				this._fadeOut.stop();
			}
			if (this._underlay) {
				this._underlay.destroy();
			}
		}, _position:function () {
			if (dojo.hasClass(dojo.body(), "dojoMove")) {
				return;
			}
			var viewport = dijit.getViewport();
			var mb = dojo.marginBox(this.domNode);
			var style = this.domNode.style;
			style.left = Math.floor((viewport.l + (viewport.w - mb.w) / 2)) + "px";
			style.top = Math.floor((viewport.t + (viewport.h - mb.h) / 2)) + "px";
		}, _onKey:function (evt) {
			if (evt.keyCode) {
				var node = evt.target;
				if (evt.keyCode == dojo.keys.TAB) {
					this._getFocusItems(this.domNode);
				}
				var singleFocusItem = (this._firstFocusItem == this._lastFocusItem);
				if (node == this._firstFocusItem && evt.shiftKey && evt.keyCode == dojo.keys.TAB) {
					if (!singleFocusItem) {
						dijit.focus(this._lastFocusItem);
					}
					dojo.stopEvent(evt);
				} else {
					if (node == this._lastFocusItem && evt.keyCode == dojo.keys.TAB && !evt.shiftKey) {
						if (!singleFocusItem) {
							dijit.focus(this._firstFocusItem);
						}
						dojo.stopEvent(evt);
					} else {
						while (node) {
							if (node == this.domNode) {
								if (evt.keyCode == dojo.keys.ESCAPE) {
									this.hide();
								} else {
									return;
								}
							}
							node = node.parentNode;
						}
						if (evt.keyCode != dojo.keys.TAB) {
							dojo.stopEvent(evt);
						} else {
							if (!dojo.isOpera) {
								try {
									this._firstFocusItem.focus();
								}
								catch (e) {
								}
							}
						}
					}
				}
			}
		}, show:function () {
			if (this.open) {
				return;
			}
			if (!this._alreadyInitialized) {
				this._setup();
				this._alreadyInitialized = true;
			}
			if (this._fadeOut.status() == "playing") {
				this._fadeOut.stop();
			}
			this._modalconnects.push(dojo.connect(window, "onscroll", this, "layout"));
			this._modalconnects.push(dojo.connect(dojo.doc.documentElement, "onkeypress", this, "_onKey"));
			dojo.style(this.domNode, "opacity", 0);
			this.domNode.style.visibility = "";
			this.open = true;
			this._loadCheck();
			this._position();
			this._fadeIn.play();
			this._savedFocus = dijit.getFocus(this);
			this._getFocusItems(this.domNode);
			setTimeout(dojo.hitch(this, function () {
				dijit.focus(this._firstFocusItem);
			}), 50);
		}, hide:function () {
			if (!this._alreadyInitialized) {
				return;
			}
			if (this._fadeIn.status() == "playing") {
				this._fadeIn.stop();
			}
			this._fadeOut.play();
			if (this._scrollConnected) {
				this._scrollConnected = false;
			}
			dojo.forEach(this._modalconnects, dojo.disconnect);
			this._modalconnects = [];
			if (this.refocus) {
				this.connect(this._fadeOut, "onEnd", dojo.hitch(dijit, "focus", this._savedFocus));
			}
			this.open = false;
		}, layout:function () {
			if (this.domNode.style.visibility != "hidden") {
				this._underlay.layout();
				this._position();
			}
		}, destroy:function () {
			dojo.forEach(this._modalconnects, dojo.disconnect);
			if (this.refocus && this.open) {
				var fo = this._savedFocus;
				setTimeout(dojo.hitch(dijit, "focus", fo), 25);
			}
			this.inherited(arguments);
		}});
		dojo.declare("dijit.TooltipDialog", [dijit.layout.ContentPane, dijit._Templated, dijit.form._FormMixin, dijit._DialogMixin], {title:"", doLayout:false, _firstFocusItem:null, _lastFocusItem:null, templateString:null, templateString:"<div class=\"dijitTooltipDialog\" waiRole=\"presentation\">\n\t<div class=\"dijitTooltipContainer\" waiRole=\"presentation\">\n\t\t<div class =\"dijitTooltipContents dijitTooltipFocusNode\" dojoAttachPoint=\"containerNode\" tabindex=\"-1\" waiRole=\"dialog\"></div>\n\t</div>\n\t<div class=\"dijitTooltipConnector\" waiRole=\"presenation\"></div>\n</div>\n", postCreate:function () {
			this.inherited(arguments);
			this.connect(this.containerNode, "onkeypress", "_onKey");
			this.containerNode.title = this.title;
		}, orient:function (node, aroundCorner, corner) {
			this.domNode.className = "dijitTooltipDialog " + " dijitTooltipAB" + (corner.charAt(1) == "L" ? "Left" : "Right") + " dijitTooltip" + (corner.charAt(0) == "T" ? "Below" : "Above");
		}, onOpen:function (pos) {
			this._getFocusItems(this.containerNode);
			this.orient(this.domNode, pos.aroundCorner, pos.corner);
			this._loadCheck();
			dijit.focus(this._firstFocusItem);
		}, _onKey:function (evt) {
			var node = evt.target;
			if (evt.keyCode == dojo.keys.TAB) {
				this._getFocusItems(this.containerNode);
			}
			var singleFocusItem = (this._firstFocusItem == this._lastFocusItem);
			if (evt.keyCode == dojo.keys.ESCAPE) {
				this.onCancel();
			} else {
				if (node == this._firstFocusItem && evt.shiftKey && evt.keyCode == dojo.keys.TAB) {
					if (!singleFocusItem) {
						dijit.focus(this._lastFocusItem);
					}
					dojo.stopEvent(evt);
				} else {
					if (node == this._lastFocusItem && evt.keyCode == dojo.keys.TAB && !evt.shiftKey) {
						if (!singleFocusItem) {
							dijit.focus(this._firstFocusItem);
						}
						dojo.stopEvent(evt);
					} else {
						if (evt.keyCode == dojo.keys.TAB) {
							evt.stopPropagation();
						}
					}
				}
			}
		}});
	}
	if (!dojo._hasResource["dijit.Declaration"]) {
		dojo._hasResource["dijit.Declaration"] = true;
		dojo.provide("dijit.Declaration");
		dojo.declare("dijit.Declaration", dijit._Widget, {_noScript:true, widgetClass:"", replaceVars:true, defaults:null, mixins:[], buildRendering:function () {
			var src = this.srcNodeRef.parentNode.removeChild(this.srcNodeRef);
			var preambles = dojo.query("> script[type='dojo/method'][event='preamble']", src).orphan();
			var scripts = dojo.query("> script[type^='dojo/']", src).orphan();
			var srcType = src.nodeName;
			var propList = this.defaults || {};
			this.mixins = this.mixins.length ? dojo.map(this.mixins, function (name) {
				return dojo.getObject(name);
			}) : [dijit._Widget, dijit._Templated];
			if (preambles.length) {
				propList.preamble = dojo.parser._functionFromScript(preambles[0]);
			}
			var parsedScripts = dojo.map(scripts, function (s) {
				var evt = s.getAttribute("event") || "postscript";
				return {event:evt, func:dojo.parser._functionFromScript(s)};
			});
			this.mixins.push(function () {
				dojo.forEach(parsedScripts, function (s) {
					dojo.connect(this, s.event, this, s.func);
				}, this);
			});
			propList.widgetsInTemplate = true;
			propList._skipNodeCache = true;
			propList.templateString = "<" + srcType + " class='" + src.className + "' dojoAttachPoint='" + (src.getAttribute("dojoAttachPoint") || "") + "' dojoAttachEvent='" + (src.getAttribute("dojoAttachEvent") || "") + "' >" + src.innerHTML.replace(/\%7B/g, "{").replace(/\%7D/g, "}") + "</" + srcType + ">";
			dojo.query("[dojoType]", src).forEach(function (node) {
				node.removeAttribute("dojoType");
			});
			dojo.declare(this.widgetClass, this.mixins, propList);
		}});
	}
	if (!dojo._hasResource["dijit._Calendar"]) {
		dojo._hasResource["dijit._Calendar"] = true;
		dojo.provide("dijit._Calendar");
		dojo.declare("dijit._Calendar", [dijit._Widget, dijit._Templated], {templateString:"<table cellspacing=\"0\" cellpadding=\"0\" class=\"dijitCalendarContainer\">\n\t<thead>\n\t\t<tr class=\"dijitReset dijitCalendarMonthContainer\" valign=\"top\">\n\t\t\t<th class='dijitReset' dojoAttachPoint=\"decrementMonth\">\n\t\t\t\t<div class=\"dijitInline dijitCalendarIncrementControl dijitCalendarDecrease\"><span dojoAttachPoint=\"decreaseArrowNode\" class=\"dijitA11ySideArrow dijitCalendarIncrementControl dijitCalendarDecreaseInner\">-</span></div>\n\t\t\t</th>\n\t\t\t<th class='dijitReset' colspan=\"5\">\n\t\t\t\t<div dojoAttachPoint=\"monthLabelSpacer\" class=\"dijitCalendarMonthLabelSpacer\"></div>\n\t\t\t\t<div dojoAttachPoint=\"monthLabelNode\" class=\"dijitCalendarMonthLabel\"></div>\n\t\t\t</th>\n\t\t\t<th class='dijitReset' dojoAttachPoint=\"incrementMonth\">\n\t\t\t\t<div class=\"dijitInline dijitCalendarIncrementControl dijitCalendarIncrease\"><span dojoAttachPoint=\"increaseArrowNode\" class=\"dijitA11ySideArrow dijitCalendarIncrementControl dijitCalendarIncreaseInner\">+</span></div>\n\t\t\t</th>\n\t\t</tr>\n\t\t<tr>\n\t\t\t<th class=\"dijitReset dijitCalendarDayLabelTemplate\"><span class=\"dijitCalendarDayLabel\"></span></th>\n\t\t</tr>\n\t</thead>\n\t<tbody dojoAttachEvent=\"onclick: _onDayClick\" class=\"dijitReset dijitCalendarBodyContainer\">\n\t\t<tr class=\"dijitReset dijitCalendarWeekTemplate\">\n\t\t\t<td class=\"dijitReset dijitCalendarDateTemplate\"><span class=\"dijitCalendarDateLabel\"></span></td>\n\t\t</tr>\n\t</tbody>\n\t<tfoot class=\"dijitReset dijitCalendarYearContainer\">\n\t\t<tr>\n\t\t\t<td class='dijitReset' valign=\"top\" colspan=\"7\">\n\t\t\t\t<h3 class=\"dijitCalendarYearLabel\">\n\t\t\t\t\t<span dojoAttachPoint=\"previousYearLabelNode\" class=\"dijitInline dijitCalendarPreviousYear\"></span>\n\t\t\t\t\t<span dojoAttachPoint=\"currentYearLabelNode\" class=\"dijitInline dijitCalendarSelectedYear\"></span>\n\t\t\t\t\t<span dojoAttachPoint=\"nextYearLabelNode\" class=\"dijitInline dijitCalendarNextYear\"></span>\n\t\t\t\t</h3>\n\t\t\t</td>\n\t\t</tr>\n\t</tfoot>\n</table>\t\n", value:new Date(), dayWidth:"narrow", setValue:function (value) {
			if (!this.value || dojo.date.compare(value, this.value)) {
				value = new Date(value);
				this.displayMonth = new Date(value);
				if (!this.isDisabledDate(value, this.lang)) {
					this.value = value;
					this.value.setHours(0, 0, 0, 0);
					this.onChange(this.value);
				}
				this._populateGrid();
			}
		}, _setText:function (node, text) {
			while (node.firstChild) {
				node.removeChild(node.firstChild);
			}
			node.appendChild(dojo.doc.createTextNode(text));
		}, _populateGrid:function () {
			var month = this.displayMonth;
			month.setDate(1);
			var firstDay = month.getDay();
			var daysInMonth = dojo.date.getDaysInMonth(month);
			var daysInPreviousMonth = dojo.date.getDaysInMonth(dojo.date.add(month, "month", -1));
			var today = new Date();
			var selected = this.value;
			var dayOffset = dojo.cldr.supplemental.getFirstDayOfWeek(this.lang);
			if (dayOffset > firstDay) {
				dayOffset -= 7;
			}
			dojo.query(".dijitCalendarDateTemplate", this.domNode).forEach(function (template, i) {
				i += dayOffset;
				var date = new Date(month);
				var number, clazz = "dijitCalendar", adj = 0;
				if (i < firstDay) {
					number = daysInPreviousMonth - firstDay + i + 1;
					adj = -1;
					clazz += "Previous";
				} else {
					if (i >= (firstDay + daysInMonth)) {
						number = i - firstDay - daysInMonth + 1;
						adj = 1;
						clazz += "Next";
					} else {
						number = i - firstDay + 1;
						clazz += "Current";
					}
				}
				if (adj) {
					date = dojo.date.add(date, "month", adj);
				}
				date.setDate(number);
				if (!dojo.date.compare(date, today, "date")) {
					clazz = "dijitCalendarCurrentDate " + clazz;
				}
				if (!dojo.date.compare(date, selected, "date")) {
					clazz = "dijitCalendarSelectedDate " + clazz;
				}
				if (this.isDisabledDate(date, this.lang)) {
					clazz = "dijitCalendarDisabledDate " + clazz;
				}
				var clazz2 = this.getClassForDate(date, this.lang);
				if (clazz2) {
					clazz += clazz2 + " " + clazz;
				}
				template.className = clazz + "Month dijitCalendarDateTemplate";
				template.dijitDateValue = date.valueOf();
				var label = dojo.query(".dijitCalendarDateLabel", template)[0];
				this._setText(label, date.getDate());
			}, this);
			var monthNames = dojo.date.locale.getNames("months", "wide", "standAlone", this.lang);
			this._setText(this.monthLabelNode, monthNames[month.getMonth()]);
			var y = month.getFullYear() - 1;
			var d = new Date();
			dojo.forEach(["previous", "current", "next"], function (name) {
				d.setFullYear(y++);
				this._setText(this[name + "YearLabelNode"], dojo.date.locale.format(d, {selector:"year", locale:this.lang}));
			}, this);
			var _this = this;
			var typematic = function (nodeProp, dateProp, adj) {
				dijit.typematic.addMouseListener(_this[nodeProp], _this, function (count) {
					if (count >= 0) {
						_this._adjustDisplay(dateProp, adj);
					}
				}, 0.8, 500);
			};
			typematic("incrementMonth", "month", 1);
			typematic("decrementMonth", "month", -1);
			typematic("nextYearLabelNode", "year", 1);
			typematic("previousYearLabelNode", "year", -1);
		}, goToToday:function () {
			this.setValue(new Date());
		}, postCreate:function () {
			this.inherited(arguments);
			var cloneClass = dojo.hitch(this, function (clazz, n) {
				var template = dojo.query(clazz, this.domNode)[0];
				for (var i = 0; i < n; i++) {
					template.parentNode.appendChild(template.cloneNode(true));
				}
			});
			cloneClass(".dijitCalendarDayLabelTemplate", 6);
			cloneClass(".dijitCalendarDateTemplate", 6);
			cloneClass(".dijitCalendarWeekTemplate", 5);
			var dayNames = dojo.date.locale.getNames("days", this.dayWidth, "standAlone", this.lang);
			var dayOffset = dojo.cldr.supplemental.getFirstDayOfWeek(this.lang);
			dojo.query(".dijitCalendarDayLabel", this.domNode).forEach(function (label, i) {
				this._setText(label, dayNames[(i + dayOffset) % 7]);
			}, this);
			var monthNames = dojo.date.locale.getNames("months", "wide", "standAlone", this.lang);
			dojo.forEach(monthNames, function (name) {
				var monthSpacer = dojo.doc.createElement("div");
				this._setText(monthSpacer, name);
				this.monthLabelSpacer.appendChild(monthSpacer);
			}, this);
			this.value = null;
			this.setValue(new Date());
		}, _adjustDisplay:function (part, amount) {
			this.displayMonth = dojo.date.add(this.displayMonth, part, amount);
			this._populateGrid();
		}, _onDayClick:function (evt) {
			var node = evt.target;
			dojo.stopEvent(evt);
			while (!node.dijitDateValue) {
				node = node.parentNode;
			}
			if (!dojo.hasClass(node, "dijitCalendarDisabledDate")) {
				this.setValue(node.dijitDateValue);
				this.onValueSelected(this.value);
			}
		}, onValueSelected:function (date) {
		}, onChange:function (date) {
		}, isDisabledDate:function (dateObject, locale) {
		}, getClassForDate:function (dateObject, locale) {
		}});
	}
	if (!dojo._hasResource["dijit.form._FormWidget"]) {
		dojo._hasResource["dijit.form._FormWidget"] = true;
		dojo.provide("dijit.form._FormWidget");
		dojo.declare("dijit.form._FormWidget", [dijit._Widget, dijit._Templated], {baseClass:"", name:"", alt:"", value:"", type:"text", tabIndex:"0", disabled:false, readOnly:false, intermediateChanges:false, attributeMap:dojo.mixin(dojo.clone(dijit._Widget.prototype.attributeMap), {value:"focusNode", disabled:"focusNode", readOnly:"focusNode", id:"focusNode", tabIndex:"focusNode", alt:"focusNode"}), setAttribute:function (attr, value) {
			this.inherited(arguments);
			switch (attr) {
			  case "disabled":
				var tabIndexNode = this[this.attributeMap["tabIndex"] || "domNode"];
				if (value) {
					this._hovering = false;
					this._active = false;
					tabIndexNode.removeAttribute("tabIndex");
				} else {
					tabIndexNode.setAttribute("tabIndex", this.tabIndex);
				}
				dijit.setWaiState(this[this.attributeMap["disabled"] || "domNode"], "disabled", value);
				this._setStateClass();
			}
		}, setDisabled:function (disabled) {
			dojo.deprecated("setDisabled(" + disabled + ") is deprecated. Use setAttribute('disabled'," + disabled + ") instead.", "", "2.0");
			this.setAttribute("disabled", disabled);
		}, _onMouse:function (event) {
			var mouseNode = event.currentTarget;
			if (mouseNode && mouseNode.getAttribute) {
				this.stateModifier = mouseNode.getAttribute("stateModifier") || "";
			}
			if (!this.disabled) {
				switch (event.type) {
				  case "mouseenter":
				  case "mouseover":
					this._hovering = true;
					this._active = this._mouseDown;
					break;
				  case "mouseout":
				  case "mouseleave":
					this._hovering = false;
					this._active = false;
					break;
				  case "mousedown":
					this._active = true;
					this._mouseDown = true;
					var mouseUpConnector = this.connect(dojo.body(), "onmouseup", function () {
						this._active = false;
						this._mouseDown = false;
						this._setStateClass();
						this.disconnect(mouseUpConnector);
					});
					if (this.isFocusable()) {
						this.focus();
					}
					break;
				}
				this._setStateClass();
			}
		}, isFocusable:function () {
			return !this.disabled && !this.readOnly && this.focusNode && (dojo.style(this.domNode, "display") != "none");
		}, focus:function () {
			setTimeout(dojo.hitch(this, dijit.focus, this.focusNode), 0);
		}, _setStateClass:function () {
			if (!("staticClass" in this)) {
				this.staticClass = (this.stateNode || this.domNode).className;
			}
			var classes = [this.baseClass];
			function multiply(modifier) {
				classes = classes.concat(dojo.map(classes, function (c) {
					return c + modifier;
				}), "dijit" + modifier);
			}
			if (this.checked) {
				multiply("Checked");
			}
			if (this.state) {
				multiply(this.state);
			}
			if (this.selected) {
				multiply("Selected");
			}
			if (this.disabled) {
				multiply("Disabled");
			} else {
				if (this.readOnly) {
					multiply("ReadOnly");
				} else {
					if (this._active) {
						multiply(this.stateModifier + "Active");
					} else {
						if (this._focused) {
							multiply("Focused");
						}
						if (this._hovering) {
							multiply(this.stateModifier + "Hover");
						}
					}
				}
			}
			(this.stateNode || this.domNode).className = this.staticClass + " " + classes.join(" ");
		}, onChange:function (newValue) {
		}, _onChangeMonitor:"value", _onChangeActive:false, _handleOnChange:function (newValue, priorityChange) {
			this._lastValue = newValue;
			if (this._lastValueReported == undefined && (priorityChange === null || !this._onChangeActive)) {
				this._resetValue = this._lastValueReported = newValue;
			}
			if ((this.intermediateChanges || priorityChange || priorityChange === undefined) && ((newValue && newValue.toString) ? newValue.toString() : newValue) !== ((this._lastValueReported && this._lastValueReported.toString) ? this._lastValueReported.toString() : this._lastValueReported)) {
				this._lastValueReported = newValue;
				if (this._onChangeActive) {
					this.onChange(newValue);
				}
			}
		}, reset:function () {
			this._hasBeenBlurred = false;
			if (this.setValue && !this._getValueDeprecated) {
				this.setValue(this._resetValue, true);
			} else {
				if (this._onChangeMonitor) {
					this.setAttribute(this._onChangeMonitor, (this._resetValue !== undefined && this._resetValue !== null) ? this._resetValue : "");
				}
			}
		}, create:function () {
			this.inherited(arguments);
			this._onChangeActive = true;
			this._setStateClass();
		}, destroy:function () {
			if (this._layoutHackHandle) {
				clearTimeout(this._layoutHackHandle);
			}
			this.inherited(arguments);
		}, setValue:function (value) {
			dojo.deprecated("dijit.form._FormWidget:setValue(" + value + ") is deprecated.  Use setAttribute('value'," + value + ") instead.", "", "2.0");
			this.setAttribute("value", value);
		}, _getValueDeprecated:true, getValue:function () {
			dojo.deprecated("dijit.form._FormWidget:getValue() is deprecated.  Use widget.value instead.", "", "2.0");
			return this.value;
		}, _layoutHack:function () {
			if (dojo.isFF == 2) {
				var node = this.domNode;
				var old = node.style.opacity;
				node.style.opacity = "0.999";
				this._layoutHackHandle = setTimeout(dojo.hitch(this, function () {
					this._layoutHackHandle = null;
					node.style.opacity = old;
				}), 0);
			}
		}});
		dojo.declare("dijit.form._FormValueWidget", dijit.form._FormWidget, {attributeMap:dojo.mixin(dojo.clone(dijit.form._FormWidget.prototype.attributeMap), {value:""}), postCreate:function () {
			this.setValue(this.value, null);
		}, setValue:function (newValue, priorityChange) {
			this.value = newValue;
			this._handleOnChange(newValue, priorityChange);
		}, _getValueDeprecated:false, getValue:function () {
			return this._lastValue;
		}, undo:function () {
			this.setValue(this._lastValueReported, false);
		}, _valueChanged:function () {
			var v = this.getValue();
			var lv = this._lastValueReported;
			return ((v !== null && (v !== undefined) && v.toString) ? v.toString() : "") !== ((lv !== null && (lv !== undefined) && lv.toString) ? lv.toString() : "");
		}, _onKeyPress:function (e) {
			if (e.keyCode == dojo.keys.ESCAPE && !e.shiftKey && !e.ctrlKey && !e.altKey) {
				if (this._valueChanged()) {
					this.undo();
					dojo.stopEvent(e);
					return false;
				}
			}
			return true;
		}});
	}
	if (!dojo._hasResource["dijit.form.TextBox"]) {
		dojo._hasResource["dijit.form.TextBox"] = true;
		dojo.provide("dijit.form.TextBox");
		dojo.declare("dijit.form.TextBox", dijit.form._FormValueWidget, {trim:false, uppercase:false, lowercase:false, propercase:false, maxLength:"", templateString:"<input class=\"dijit dijitReset dijitLeft\" dojoAttachPoint='textbox,focusNode' name=\"${name}\"\n\tdojoAttachEvent='onmouseenter:_onMouse,onmouseleave:_onMouse,onfocus:_onMouse,onblur:_onMouse,onkeypress:_onKeyPress'\n\tautocomplete=\"off\" type=\"${type}\"\n\t/>\n", baseClass:"dijitTextBox", attributeMap:dojo.mixin(dojo.clone(dijit.form._FormValueWidget.prototype.attributeMap), {maxLength:"focusNode"}), getDisplayedValue:function () {
			return this.filter(this.textbox.value);
		}, getValue:function () {
			return this.parse(this.getDisplayedValue(), this.constraints);
		}, setValue:function (value, priorityChange, formattedValue) {
			var filteredValue = this.filter(value);
			if ((((typeof filteredValue == typeof value) && (value !== undefined)) || (value === null)) && (formattedValue == null || formattedValue == undefined)) {
				formattedValue = this.format(filteredValue, this.constraints);
			}
			if (formattedValue != null && formattedValue != undefined) {
				this.textbox.value = formattedValue;
			}
			dijit.form.TextBox.superclass.setValue.call(this, filteredValue, priorityChange);
		}, setDisplayedValue:function (value, priorityChange) {
			this.textbox.value = value;
			this.setValue(this.getValue(), priorityChange);
		}, format:function (value, constraints) {
			return ((value == null || value == undefined) ? "" : (value.toString ? value.toString() : value));
		}, parse:function (value, constraints) {
			return value;
		}, postCreate:function () {
			this.textbox.setAttribute("value", this.getDisplayedValue());
			this.inherited(arguments);
			this._layoutHack();
		}, filter:function (val) {
			if (val === null || val === undefined) {
				return "";
			} else {
				if (typeof val != "string") {
					return val;
				}
			}
			if (this.trim) {
				val = dojo.trim(val);
			}
			if (this.uppercase) {
				val = val.toUpperCase();
			}
			if (this.lowercase) {
				val = val.toLowerCase();
			}
			if (this.propercase) {
				val = val.replace(/[^\s]+/g, function (word) {
					return word.substring(0, 1).toUpperCase() + word.substring(1);
				});
			}
			return val;
		}, _setBlurValue:function () {
			this.setValue(this.getValue(), (this.isValid ? this.isValid() : true));
		}, _onBlur:function () {
			this._setBlurValue();
			this.inherited(arguments);
		}});
		dijit.selectInputText = function (element, start, stop) {
			var _window = dojo.global;
			var _document = dojo.doc;
			element = dojo.byId(element);
			if (isNaN(start)) {
				start = 0;
			}
			if (isNaN(stop)) {
				stop = element.value ? element.value.length : 0;
			}
			element.focus();
			if (_document["selection"] && dojo.body()["createTextRange"]) {
				if (element.createTextRange) {
					var range = element.createTextRange();
					with (range) {
						collapse(true);
						moveStart("character", start);
						moveEnd("character", stop);
						select();
					}
				}
			} else {
				if (_window["getSelection"]) {
					var selection = _window.getSelection();
					if (element.setSelectionRange) {
						element.setSelectionRange(start, stop);
					}
				}
			}
		};
	}
	if (!dojo._hasResource["dijit.Tooltip"]) {
		dojo._hasResource["dijit.Tooltip"] = true;
		dojo.provide("dijit.Tooltip");
		dojo.declare("dijit._MasterTooltip", [dijit._Widget, dijit._Templated], {duration:200, templateString:"<div class=\"dijitTooltip dijitTooltipLeft\" id=\"dojoTooltip\">\n\t<div class=\"dijitTooltipContainer dijitTooltipContents\" dojoAttachPoint=\"containerNode\" waiRole='alert'></div>\n\t<div class=\"dijitTooltipConnector\"></div>\n</div>\n", postCreate:function () {
			dojo.body().appendChild(this.domNode);
			this.bgIframe = new dijit.BackgroundIframe(this.domNode);
			this.fadeIn = dojo.fadeIn({node:this.domNode, duration:this.duration, onEnd:dojo.hitch(this, "_onShow")});
			this.fadeOut = dojo.fadeOut({node:this.domNode, duration:this.duration, onEnd:dojo.hitch(this, "_onHide")});
		}, show:function (innerHTML, aroundNode, position) {
			if (this.aroundNode && this.aroundNode === aroundNode) {
				return;
			}
			if (this.fadeOut.status() == "playing") {
				this._onDeck = arguments;
				return;
			}
			this.containerNode.innerHTML = innerHTML;
			this.domNode.style.top = (this.domNode.offsetTop + 1) + "px";
			var align = {};
			var ltr = this.isLeftToRight();
			dojo.forEach((position && position.length) ? position : dijit.Tooltip.defaultPosition, function (pos) {
				switch (pos) {
				  case "after":
					align[ltr ? "BR" : "BL"] = ltr ? "BL" : "BR";
					break;
				  case "before":
					align[ltr ? "BL" : "BR"] = ltr ? "BR" : "BL";
					break;
				  case "below":
					align[ltr ? "BL" : "BR"] = ltr ? "TL" : "TR";
					align[ltr ? "BR" : "BL"] = ltr ? "TR" : "TL";
					break;
				  case "above":
				  default:
					align[ltr ? "TL" : "TR"] = ltr ? "BL" : "BR";
					align[ltr ? "TR" : "TL"] = ltr ? "BR" : "BL";
					break;
				}
			});
			var pos = dijit.placeOnScreenAroundElement(this.domNode, aroundNode, align, dojo.hitch(this, "orient"));
			dojo.style(this.domNode, "opacity", 0);
			this.fadeIn.play();
			this.isShowingNow = true;
			this.aroundNode = aroundNode;
		}, orient:function (node, aroundCorner, tooltipCorner) {
			node.className = "dijitTooltip " + {"BL-TL":"dijitTooltipBelow dijitTooltipABLeft", "TL-BL":"dijitTooltipAbove dijitTooltipABLeft", "BR-TR":"dijitTooltipBelow dijitTooltipABRight", "TR-BR":"dijitTooltipAbove dijitTooltipABRight", "BR-BL":"dijitTooltipRight", "BL-BR":"dijitTooltipLeft"}[aroundCorner + "-" + tooltipCorner];
		}, _onShow:function () {
			if (dojo.isIE) {
				this.domNode.style.filter = "";
			}
		}, hide:function (aroundNode) {
			if (!this.aroundNode || this.aroundNode !== aroundNode) {
				return;
			}
			if (this._onDeck) {
				this._onDeck = null;
				return;
			}
			this.fadeIn.stop();
			this.isShowingNow = false;
			this.aroundNode = null;
			this.fadeOut.play();
		}, _onHide:function () {
			this.domNode.style.cssText = "";
			if (this._onDeck) {
				this.show.apply(this, this._onDeck);
				this._onDeck = null;
			}
		}});
		dijit.showTooltip = function (innerHTML, aroundNode, position) {
			if (!dijit._masterTT) {
				dijit._masterTT = new dijit._MasterTooltip();
			}
			return dijit._masterTT.show(innerHTML, aroundNode, position);
		};
		dijit.hideTooltip = function (aroundNode) {
			if (!dijit._masterTT) {
				dijit._masterTT = new dijit._MasterTooltip();
			}
			return dijit._masterTT.hide(aroundNode);
		};
		dojo.declare("dijit.Tooltip", dijit._Widget, {label:"", showDelay:400, connectId:[], position:[], postCreate:function () {
			if (this.srcNodeRef) {
				this.srcNodeRef.style.display = "none";
			}
			this._connectNodes = [];
			dojo.forEach(this.connectId, function (id) {
				var node = dojo.byId(id);
				if (node) {
					this._connectNodes.push(node);
					dojo.forEach(["onMouseOver", "onMouseOut", "onFocus", "onBlur", "onHover", "onUnHover"], function (event) {
						this.connect(node, event.toLowerCase(), "_" + event);
					}, this);
					if (dojo.isIE) {
						node.style.zoom = 1;
					}
				}
			}, this);
		}, _onMouseOver:function (e) {
			this._onHover(e);
		}, _onMouseOut:function (e) {
			if (dojo.isDescendant(e.relatedTarget, e.target)) {
				return;
			}
			this._onUnHover(e);
		}, _onFocus:function (e) {
			this._focus = true;
			this._onHover(e);
			this.inherited(arguments);
		}, _onBlur:function (e) {
			this._focus = false;
			this._onUnHover(e);
			this.inherited(arguments);
		}, _onHover:function (e) {
			if (!this._showTimer) {
				var target = e.target;
				this._showTimer = setTimeout(dojo.hitch(this, function () {
					this.open(target);
				}), this.showDelay);
			}
		}, _onUnHover:function (e) {
			if (this._focus) {
				return;
			}
			if (this._showTimer) {
				clearTimeout(this._showTimer);
				delete this._showTimer;
			}
			this.close();
		}, open:function (target) {
			target = target || this._connectNodes[0];
			if (!target) {
				return;
			}
			if (this._showTimer) {
				clearTimeout(this._showTimer);
				delete this._showTimer;
			}
			dijit.showTooltip(this.label || this.domNode.innerHTML, target, this.position);
			this._connectNode = target;
		}, close:function () {
			dijit.hideTooltip(this._connectNode);
			delete this._connectNode;
			if (this._showTimer) {
				clearTimeout(this._showTimer);
				delete this._showTimer;
			}
		}, uninitialize:function () {
			this.close();
		}});
		dijit.Tooltip.defaultPosition = ["after", "before"];
	}
	if (!dojo._hasResource["dijit.form.ValidationTextBox"]) {
		dojo._hasResource["dijit.form.ValidationTextBox"] = true;
		dojo.provide("dijit.form.ValidationTextBox");
		dojo.declare("dijit.form.ValidationTextBox", dijit.form.TextBox, {templateString:"<div class=\"dijit dijitReset dijitInlineTable dijitLeft\"\n\tid=\"widget_${id}\"\n\tdojoAttachEvent=\"onmouseenter:_onMouse,onmouseleave:_onMouse,onmousedown:_onMouse\" waiRole=\"presentation\"\n\t><div style=\"overflow:hidden;\"\n\t\t><div class=\"dijitReset dijitValidationIcon\"><br></div\n\t\t><div class=\"dijitReset dijitValidationIconText\">&Chi;</div\n\t\t><div class=\"dijitReset dijitInputField\"\n\t\t\t><input class=\"dijitReset\" dojoAttachPoint='textbox,focusNode' dojoAttachEvent='onfocus:_update,onkeyup:_update,onblur:_onMouse,onkeypress:_onKeyPress' autocomplete=\"off\"\n\t\t\ttype='${type}' name='${name}'\n\t\t/></div\n\t></div\n></div>\n", baseClass:"dijitTextBox", required:false, promptMessage:"", invalidMessage:"$_unset_$", constraints:{}, regExp:".*", regExpGen:function (constraints) {
			return this.regExp;
		}, state:"", tooltipPosition:[], setValue:function () {
			this.inherited(arguments);
			this.validate(this._focused);
		}, validator:function (value, constraints) {
			return (new RegExp("^(" + this.regExpGen(constraints) + ")" + (this.required ? "" : "?") + "$")).test(value) && (!this.required || !this._isEmpty(value)) && (this._isEmpty(value) || this.parse(value, constraints) !== undefined);
		}, isValid:function (isFocused) {
			return this.validator(this.textbox.value, this.constraints);
		}, _isEmpty:function (value) {
			return /^\s*$/.test(value);
		}, getErrorMessage:function (isFocused) {
			return this.invalidMessage;
		}, getPromptMessage:function (isFocused) {
			return this.promptMessage;
		}, validate:function (isFocused) {
			var message = "";
			var isValid = this.isValid(isFocused);
			var isEmpty = this._isEmpty(this.textbox.value);
			this.state = (isValid || (!this._hasBeenBlurred && isEmpty)) ? "" : "Error";
			this._setStateClass();
			dijit.setWaiState(this.focusNode, "invalid", isValid ? "false" : "true");
			if (isFocused) {
				if (isEmpty) {
					message = this.getPromptMessage(true);
				}
				if (!message && this.state == "Error") {
					message = this.getErrorMessage(true);
				}
			}
			this.displayMessage(message);
			return isValid;
		}, _message:"", displayMessage:function (message) {
			if (this._message == message) {
				return;
			}
			this._message = message;
			dijit.hideTooltip(this.domNode);
			if (message) {
				dijit.showTooltip(message, this.domNode, this.tooltipPosition);
			}
		}, _refreshState:function () {
			this.validate(this._focused);
		}, _update:function (e) {
			this._refreshState();
			this._onMouse(e);
		}, constructor:function () {
			this.constraints = {};
		}, postMixInProperties:function () {
			this.inherited(arguments);
			this.constraints.locale = this.lang;
			this.messages = dojo.i18n.getLocalization("dijit.form", "validate", this.lang);
			if (this.invalidMessage == "$_unset_$") {
				this.invalidMessage = this.messages.invalidMessage;
			}
			var p = this.regExpGen(this.constraints);
			this.regExp = p;
		}});
		dojo.declare("dijit.form.MappedTextBox", dijit.form.ValidationTextBox, {serialize:function (val, options) {
			return val.toString ? val.toString() : "";
		}, toString:function () {
			var val = this.filter(this.getValue());
			return val != null ? (typeof val == "string" ? val : this.serialize(val, this.constraints)) : "";
		}, validate:function () {
			this.valueNode.value = this.toString();
			return this.inherited(arguments);
		}, setAttribute:function (attr, value) {
			this.inherited(arguments);
			switch (attr) {
			  case "disabled":
				if (this.valueNode) {
					this.valueNode.disabled = this.disabled;
				}
			}
		}, postCreate:function () {
			var textbox = this.textbox;
			var valueNode = (this.valueNode = dojo.doc.createElement("input"));
			valueNode.setAttribute("type", textbox.type);
			valueNode.setAttribute("value", this.toString());
			dojo.style(valueNode, "display", "none");
			valueNode.name = this.textbox.name;
			valueNode.disabled = this.textbox.disabled;
			this.textbox.name = this.textbox.name + "_displayed_";
			this.textbox.removeAttribute("name");
			dojo.place(valueNode, textbox, "after");
			this.inherited(arguments);
		}});
		dojo.declare("dijit.form.RangeBoundTextBox", dijit.form.MappedTextBox, {rangeMessage:"", compare:function (val1, val2) {
			return val1 - val2;
		}, rangeCheck:function (primitive, constraints) {
			var isMin = "min" in constraints;
			var isMax = "max" in constraints;
			if (isMin || isMax) {
				return (!isMin || this.compare(primitive, constraints.min) >= 0) && (!isMax || this.compare(primitive, constraints.max) <= 0);
			}
			return true;
		}, isInRange:function (isFocused) {
			return this.rangeCheck(this.getValue(), this.constraints);
		}, isValid:function (isFocused) {
			return this.inherited(arguments) && ((this._isEmpty(this.textbox.value) && !this.required) || this.isInRange(isFocused));
		}, getErrorMessage:function (isFocused) {
			if (dijit.form.RangeBoundTextBox.superclass.isValid.call(this, false) && !this.isInRange(isFocused)) {
				return this.rangeMessage;
			}
			return this.inherited(arguments);
		}, postMixInProperties:function () {
			this.inherited(arguments);
			if (!this.rangeMessage) {
				this.messages = dojo.i18n.getLocalization("dijit.form", "validate", this.lang);
				this.rangeMessage = this.messages.rangeMessage;
			}
		}, postCreate:function () {
			this.inherited(arguments);
			if (this.constraints.min !== undefined) {
				dijit.setWaiState(this.focusNode, "valuemin", this.constraints.min);
			}
			if (this.constraints.max !== undefined) {
				dijit.setWaiState(this.focusNode, "valuemax", this.constraints.max);
			}
		}, setValue:function (value, priorityChange) {
			dijit.setWaiState(this.focusNode, "valuenow", value);
			this.inherited("setValue", arguments);
		}});
	}
	if (!dojo._hasResource["dijit.form._DateTimeTextBox"]) {
		dojo._hasResource["dijit.form._DateTimeTextBox"] = true;
		dojo.provide("dijit.form._DateTimeTextBox");
		dojo.declare("dijit.form._DateTimeTextBox", dijit.form.RangeBoundTextBox, {regExpGen:dojo.date.locale.regexp, compare:dojo.date.compare, format:function (value, constraints) {
			if (!value) {
				return "";
			}
			return dojo.date.locale.format(value, constraints);
		}, parse:function (value, constraints) {
			return dojo.date.locale.parse(value, constraints) || undefined;
		}, serialize:dojo.date.stamp.toISOString, value:new Date(""), popupClass:"", _selector:"", postMixInProperties:function () {
			this.inherited(arguments);
			if (!this.value || this.value.toString() == dijit.form._DateTimeTextBox.prototype.value.toString()) {
				this.value = undefined;
			}
			var constraints = this.constraints;
			constraints.selector = this._selector;
			constraints.fullYear = true;
			var fromISO = dojo.date.stamp.fromISOString;
			if (typeof constraints.min == "string") {
				constraints.min = fromISO(constraints.min);
			}
			if (typeof constraints.max == "string") {
				constraints.max = fromISO(constraints.max);
			}
		}, _onFocus:function (evt) {
			this._open();
		}, setValue:function (value, priorityChange, formattedValue) {
			this.inherited(arguments);
			if (this._picker) {
				if (!value) {
					value = new Date();
				}
				this._picker.setValue(value);
			}
		}, _open:function () {
			if (this.disabled || this.readOnly || !this.popupClass) {
				return;
			}
			var textBox = this;
			if (!this._picker) {
				var PopupProto = dojo.getObject(this.popupClass, false);
				this._picker = new PopupProto({onValueSelected:function (value) {
					textBox.focus();
					setTimeout(dojo.hitch(textBox, "_close"), 1);
					dijit.form._DateTimeTextBox.superclass.setValue.call(textBox, value, true);
				}, lang:textBox.lang, constraints:textBox.constraints, isDisabledDate:function (date) {
					var compare = dojo.date.compare;
					var constraints = textBox.constraints;
					return constraints && (constraints.min && (compare(constraints.min, date, "date") > 0) || (constraints.max && compare(constraints.max, date, "date") < 0));
				}});
				this._picker.setValue(this.getValue() || new Date());
			}
			if (!this._opened) {
				dijit.popup.open({parent:this, popup:this._picker, around:this.domNode, onCancel:dojo.hitch(this, this._close), onClose:function () {
					textBox._opened = false;
				}});
				this._opened = true;
			}
			dojo.marginBox(this._picker.domNode, {w:this.domNode.offsetWidth});
		}, _close:function () {
			if (this._opened) {
				dijit.popup.close(this._picker);
				this._opened = false;
			}
		}, _onBlur:function () {
			this._close();
			if (this._picker) {
				this._picker.destroy();
				delete this._picker;
			}
			this.inherited(arguments);
		}, getDisplayedValue:function () {
			return this.textbox.value;
		}, setDisplayedValue:function (value, priorityChange) {
			this.setValue(this.parse(value, this.constraints), priorityChange, value);
		}, destroy:function () {
			if (this._picker) {
				this._picker.destroy();
				delete this._picker;
			}
			this.inherited(arguments);
		}, _onKeyPress:function (e) {
			if (dijit.form._DateTimeTextBox.superclass._onKeyPress.apply(this, arguments)) {
				if (this._opened && e.keyCode == dojo.keys.ESCAPE && !e.shiftKey && !e.ctrlKey && !e.altKey) {
					this._close();
					dojo.stopEvent(e);
				}
			}
		}});
	}
	if (!dojo._hasResource["dijit.form.DateTextBox"]) {
		dojo._hasResource["dijit.form.DateTextBox"] = true;
		dojo.provide("dijit.form.DateTextBox");
		dojo.declare("dijit.form.DateTextBox", dijit.form._DateTimeTextBox, {popupClass:"dijit._Calendar", _selector:"date"});
	}
	if (!dojo._hasResource["dijit.form.Button"]) {
		dojo._hasResource["dijit.form.Button"] = true;
		dojo.provide("dijit.form.Button");
		dojo.declare("dijit.form.Button", dijit.form._FormWidget, {label:"", showLabel:true, iconClass:"", type:"button", baseClass:"dijitButton", templateString:"<div class=\"dijit dijitReset dijitLeft dijitInline\"\n\tdojoAttachEvent=\"onclick:_onButtonClick,onmouseenter:_onMouse,onmouseleave:_onMouse,onmousedown:_onMouse\"\n\twaiRole=\"presentation\"\n\t><button class=\"dijitReset dijitStretch dijitButtonNode dijitButtonContents\" dojoAttachPoint=\"focusNode,titleNode\"\n\t\ttype=\"${type}\" waiRole=\"button\" waiState=\"labelledby-${id}_label\"\n\t\t><span class=\"dijitReset dijitInline ${iconClass}\" dojoAttachPoint=\"iconNode\" \n \t\t\t><span class=\"dijitReset dijitToggleButtonIconChar\">&#10003;</span \n\t\t></span\n\t\t><div class=\"dijitReset dijitInline\"><center class=\"dijitReset dijitButtonText\" id=\"${id}_label\" dojoAttachPoint=\"containerNode\">${label}</center></div\n\t></button\n></div>\n", _onChangeMonitor:"", _onClick:function (e) {
			if (this.disabled || this.readOnly) {
				dojo.stopEvent(e);
				return false;
			}
			this._clicked();
			return this.onClick(e);
		}, _onButtonClick:function (e) {
			if (this._onClick(e) === false) {
				dojo.stopEvent(e);
			} else {
				if (this.type == "submit" && !this.focusNode.form) {
					for (var node = this.domNode; node.parentNode; node = node.parentNode) {
						var widget = dijit.byNode(node);
						if (widget && typeof widget._onSubmit == "function") {
							widget._onSubmit(e);
							break;
						}
					}
				}
			}
		}, postCreate:function () {
			if (this.showLabel == false) {
				var labelText = "";
				this.label = this.containerNode.innerHTML;
				labelText = dojo.trim(this.containerNode.innerText || this.containerNode.textContent || "");
				this.titleNode.title = labelText;
				dojo.addClass(this.containerNode, "dijitDisplayNone");
			}
			dojo.setSelectable(this.focusNode, false);
			this.inherited(arguments);
		}, onClick:function (e) {
			return true;
		}, _clicked:function (e) {
		}, setLabel:function (content) {
			this.containerNode.innerHTML = this.label = content;
			this._layoutHack();
			if (this.showLabel == false) {
				this.titleNode.title = dojo.trim(this.containerNode.innerText || this.containerNode.textContent || "");
			}
		}});
		dojo.declare("dijit.form.DropDownButton", [dijit.form.Button, dijit._Container], {baseClass:"dijitDropDownButton", templateString:"<div class=\"dijit dijitReset dijitLeft dijitInline\"\n\tdojoAttachEvent=\"onmouseenter:_onMouse,onmouseleave:_onMouse,onmousedown:_onMouse,onclick:_onDropDownClick,onkeydown:_onDropDownKeydown,onblur:_onDropDownBlur,onkeypress:_onKey\"\n\twaiRole=\"presentation\"\n\t><div class='dijitReset dijitRight' waiRole=\"presentation\"\n\t><button class=\"dijitReset dijitStretch dijitButtonNode dijitButtonContents\" type=\"${type}\"\n\t\tdojoAttachPoint=\"focusNode,titleNode\" waiRole=\"button\" waiState=\"haspopup-true,labelledby-${id}_label\"\n\t\t><div class=\"dijitReset dijitInline ${iconClass}\" dojoAttachPoint=\"iconNode\" waiRole=\"presentation\"></div\n\t\t><div class=\"dijitReset dijitInline dijitButtonText\"  dojoAttachPoint=\"containerNode,popupStateNode\" waiRole=\"presentation\"\n\t\t\tid=\"${id}_label\">${label}</div\n\t\t><div class=\"dijitReset dijitInline dijitArrowButtonInner\" waiRole=\"presentation\">&thinsp;</div\n\t\t><div class=\"dijitReset dijitInline dijitArrowButtonChar\" waiRole=\"presentation\">&#9660;</div\n\t></button\n></div></div>\n", _fillContent:function () {
			if (this.srcNodeRef) {
				var nodes = dojo.query("*", this.srcNodeRef);
				dijit.form.DropDownButton.superclass._fillContent.call(this, nodes[0]);
				this.dropDownContainer = this.srcNodeRef;
			}
		}, startup:function () {
			if (this._started) {
				return;
			}
			if (!this.dropDown) {
				var dropDownNode = dojo.query("[widgetId]", this.dropDownContainer)[0];
				this.dropDown = dijit.byNode(dropDownNode);
				delete this.dropDownContainer;
			}
			dijit.popup.prepare(this.dropDown.domNode);
			this.inherited(arguments);
		}, destroyDescendants:function () {
			if (this.dropDown) {
				this.dropDown.destroyRecursive();
				delete this.dropDown;
			}
			this.inherited(arguments);
		}, _onArrowClick:function (e) {
			if (this.disabled || this.readOnly) {
				return;
			}
			this._toggleDropDown();
		}, _onDropDownClick:function (e) {
			var isMacFFlessThan3 = dojo.isFF && dojo.isFF < 3 && navigator.appVersion.indexOf("Macintosh") != -1;
			if (!isMacFFlessThan3 || e.detail != 0 || this._seenKeydown) {
				this._onArrowClick(e);
			}
			this._seenKeydown = false;
		}, _onDropDownKeydown:function (e) {
			this._seenKeydown = true;
		}, _onDropDownBlur:function (e) {
			this._seenKeydown = false;
		}, _onKey:function (e) {
			if (this.disabled || this.readOnly) {
				return;
			}
			if (e.keyCode == dojo.keys.DOWN_ARROW) {
				if (!this.dropDown || this.dropDown.domNode.style.visibility == "hidden") {
					dojo.stopEvent(e);
					this._toggleDropDown();
				}
			}
		}, _onBlur:function () {
			this._closeDropDown();
			this.inherited(arguments);
		}, _toggleDropDown:function () {
			if (this.disabled || this.readOnly) {
				return;
			}
			dijit.focus(this.popupStateNode);
			var dropDown = this.dropDown;
			if (!dropDown) {
				return;
			}
			if (!this._opened) {
				if (dropDown.href && !dropDown.isLoaded) {
					var self = this;
					var handler = dojo.connect(dropDown, "onLoad", function () {
						dojo.disconnect(handler);
						self._openDropDown();
					});
					dropDown._loadCheck(true);
					return;
				} else {
					this._openDropDown();
				}
			} else {
				this._closeDropDown();
			}
		}, _openDropDown:function () {
			var dropDown = this.dropDown;
			var oldWidth = dropDown.domNode.style.width;
			var self = this;
			dijit.popup.open({parent:this, popup:dropDown, around:this.domNode, orient:this.isLeftToRight() ? {"BL":"TL", "BR":"TR", "TL":"BL", "TR":"BR"} : {"BR":"TR", "BL":"TL", "TR":"BR", "TL":"BL"}, onExecute:function () {
				self._closeDropDown(true);
			}, onCancel:function () {
				self._closeDropDown(true);
			}, onClose:function () {
				dropDown.domNode.style.width = oldWidth;
				self.popupStateNode.removeAttribute("popupActive");
				this._opened = false;
			}});
			if (this.domNode.offsetWidth > dropDown.domNode.offsetWidth) {
				var adjustNode = null;
				if (!this.isLeftToRight()) {
					adjustNode = dropDown.domNode.parentNode;
					var oldRight = adjustNode.offsetLeft + adjustNode.offsetWidth;
				}
				dojo.marginBox(dropDown.domNode, {w:this.domNode.offsetWidth});
				if (adjustNode) {
					adjustNode.style.left = oldRight - this.domNode.offsetWidth + "px";
				}
			}
			this.popupStateNode.setAttribute("popupActive", "true");
			this._opened = true;
			if (dropDown.focus) {
				dropDown.focus();
			}
		}, _closeDropDown:function (focus) {
			if (this._opened) {
				dijit.popup.close(this.dropDown);
				if (focus) {
					this.focus();
				}
				this._opened = false;
			}
		}});
		dojo.declare("dijit.form.ComboButton", dijit.form.DropDownButton, {templateString:"<table class='dijit dijitReset dijitInline dijitLeft'\n\tcellspacing='0' cellpadding='0' waiRole=\"presentation\"\n\t><tbody waiRole=\"presentation\"><tr waiRole=\"presentation\"\n\t\t><td\tclass=\"dijitReset dijitStretch dijitButtonContents dijitButtonNode\"\n\t\t\ttabIndex=\"${tabIndex}\"\n\t\t\tdojoAttachEvent=\"ondijitclick:_onButtonClick,onmouseenter:_onMouse,onmouseleave:_onMouse,onmousedown:_onMouse\"  dojoAttachPoint=\"titleNode\"\n\t\t\twaiRole=\"button\" waiState=\"labelledby-${id}_label\"\n\t\t\t><div class=\"dijitReset dijitInline ${iconClass}\" dojoAttachPoint=\"iconNode\" waiRole=\"presentation\"></div\n\t\t\t><div class=\"dijitReset dijitInline dijitButtonText\" id=\"${id}_label\" dojoAttachPoint=\"containerNode\" waiRole=\"presentation\">${label}</div\n\t\t></td\n\t\t><td class='dijitReset dijitStretch dijitButtonNode dijitArrowButton dijitDownArrowButton'\n\t\t\tdojoAttachPoint=\"popupStateNode,focusNode\"\n\t\t\tdojoAttachEvent=\"ondijitclick:_onArrowClick, onkeypress:_onKey,onmouseenter:_onMouse,onmouseleave:_onMouse\"\n\t\t\tstateModifier=\"DownArrow\"\n\t\t\ttitle=\"${optionsTitle}\" name=\"${name}\"\n\t\t\twaiRole=\"button\" waiState=\"haspopup-true\"\n\t\t\t><div class=\"dijitReset dijitArrowButtonInner\" waiRole=\"presentation\">&thinsp;</div\n\t\t\t><div class=\"dijitReset dijitArrowButtonChar\" waiRole=\"presentation\">&#9660;</div\n\t\t></td\n\t></tr></tbody\n></table>\n", attributeMap:dojo.mixin(dojo.clone(dijit.form._FormWidget.prototype.attributeMap), {id:"", name:""}), optionsTitle:"", baseClass:"dijitComboButton", _focusedNode:null, postCreate:function () {
			this.inherited(arguments);
			this._focalNodes = [this.titleNode, this.popupStateNode];
			dojo.forEach(this._focalNodes, dojo.hitch(this, function (node) {
				if (dojo.isIE) {
					this.connect(node, "onactivate", this._onNodeFocus);
					this.connect(node, "ondeactivate", this._onNodeBlur);
				} else {
					this.connect(node, "onfocus", this._onNodeFocus);
					this.connect(node, "onblur", this._onNodeBlur);
				}
			}));
		}, focusFocalNode:function (node) {
			this._focusedNode = node;
			dijit.focus(node);
		}, hasNextFocalNode:function () {
			return this._focusedNode !== this.getFocalNodes()[1];
		}, focusNext:function () {
			this._focusedNode = this.getFocalNodes()[this._focusedNode ? 1 : 0];
			dijit.focus(this._focusedNode);
		}, hasPrevFocalNode:function () {
			return this._focusedNode !== this.getFocalNodes()[0];
		}, focusPrev:function () {
			this._focusedNode = this.getFocalNodes()[this._focusedNode ? 0 : 1];
			dijit.focus(this._focusedNode);
		}, getFocalNodes:function () {
			return this._focalNodes;
		}, _onNodeFocus:function (evt) {
			this._focusedNode = evt.currentTarget;
			var fnc = this._focusedNode == this.focusNode ? "dijitDownArrowButtonFocused" : "dijitButtonContentsFocused";
			dojo.addClass(this._focusedNode, fnc);
		}, _onNodeBlur:function (evt) {
			var fnc = evt.currentTarget == this.focusNode ? "dijitDownArrowButtonFocused" : "dijitButtonContentsFocused";
			dojo.removeClass(evt.currentTarget, fnc);
		}, _onBlur:function () {
			this.inherited(arguments);
			this._focusedNode = null;
		}});
		dojo.declare("dijit.form.ToggleButton", dijit.form.Button, {baseClass:"dijitToggleButton", checked:false, _onChangeMonitor:"checked", attributeMap:dojo.mixin(dojo.clone(dijit.form.Button.prototype.attributeMap), {checked:"focusNode"}), _clicked:function (evt) {
			this.setAttribute("checked", !this.checked);
		}, setAttribute:function (attr, value) {
			this.inherited(arguments);
			switch (attr) {
			  case "checked":
				dijit.setWaiState(this.focusNode || this.domNode, "pressed", this.checked);
				this._setStateClass();
				this._handleOnChange(this.checked, true);
			}
		}, setChecked:function (checked) {
			dojo.deprecated("setChecked(" + checked + ") is deprecated. Use setAttribute('checked'," + checked + ") instead.", "", "2.0");
			this.setAttribute("checked", checked);
		}, postCreate:function () {
			this.inherited(arguments);
			this.setAttribute("checked", this.checked);
		}});
	}
	if (!dojo._hasResource["dijit.form.ComboBox"]) {
		dojo._hasResource["dijit.form.ComboBox"] = true;
		dojo.provide("dijit.form.ComboBox");
		dojo.declare("dijit.form.ComboBoxMixin", null, {item:null, pageSize:Infinity, store:null, query:{}, autoComplete:true, searchDelay:100, searchAttr:"name", queryExpr:"${0}*", ignoreCase:true, hasDownArrow:true, templateString:"<div class=\"dijit dijitReset dijitInlineTable dijitLeft\"\n\tid=\"widget_${id}\"\n\tdojoAttachEvent=\"onmouseenter:_onMouse,onmouseleave:_onMouse,onmousedown:_onMouse\" dojoAttachPoint=\"comboNode\" waiRole=\"combobox\" tabIndex=\"-1\"\n\t><div style=\"overflow:hidden;\"\n\t\t><div class='dijitReset dijitRight dijitButtonNode dijitArrowButton dijitDownArrowButton'\n\t\t\tdojoAttachPoint=\"downArrowNode\" waiRole=\"presentation\"\n\t\t\tdojoAttachEvent=\"onmousedown:_onArrowMouseDown,onmouseup:_onMouse,onmouseenter:_onMouse,onmouseleave:_onMouse\"\n\t\t\t><div class=\"dijitArrowButtonInner\">&thinsp;</div\n\t\t\t><div class=\"dijitArrowButtonChar\">&#9660;</div\n\t\t></div\n\t\t><div class=\"dijitReset dijitValidationIcon\"><br></div\n\t\t><div class=\"dijitReset dijitValidationIconText\">&Chi;</div\n\t\t><div class=\"dijitReset dijitInputField\"\n\t\t\t><input type=\"text\" autocomplete=\"off\" name=\"${name}\" class='dijitReset'\n\t\t\tdojoAttachEvent=\"onkeypress:_onKeyPress, onfocus:_update, compositionend\"\n\t\t\tdojoAttachPoint=\"textbox,focusNode\" waiRole=\"textbox\" waiState=\"haspopup-true,autocomplete-list\"\n\t\t/></div\n\t></div\n></div>\n", baseClass:"dijitComboBox", _getCaretPos:function (element) {
			var pos = 0;
			if (typeof (element.selectionStart) == "number") {
				pos = element.selectionStart;
			} else {
				if (dojo.isIE) {
					var tr = dojo.doc.selection.createRange().duplicate();
					var ntr = element.createTextRange();
					tr.move("character", 0);
					ntr.move("character", 0);
					try {
						ntr.setEndPoint("EndToEnd", tr);
						pos = String(ntr.text).replace(/\r/g, "").length;
					}
					catch (e) {
					}
				}
			}
			return pos;
		}, _setCaretPos:function (element, location) {
			location = parseInt(location);
			dijit.selectInputText(element, location, location);
		}, _setAttribute:function (attr, value) {
			if (attr == "disabled") {
				dijit.setWaiState(this.comboNode, "disabled", value);
			}
		}, _onKeyPress:function (evt) {
			if (evt.altKey || (evt.ctrlKey && evt.charCode != 118)) {
				return;
			}
			var doSearch = false;
			var pw = this._popupWidget;
			var dk = dojo.keys;
			if (this._isShowingNow) {
				pw.handleKey(evt);
			}
			switch (evt.keyCode) {
			  case dk.PAGE_DOWN:
			  case dk.DOWN_ARROW:
				if (!this._isShowingNow || this._prev_key_esc) {
					this._arrowPressed();
					doSearch = true;
				} else {
					this._announceOption(pw.getHighlightedOption());
				}
				dojo.stopEvent(evt);
				this._prev_key_backspace = false;
				this._prev_key_esc = false;
				break;
			  case dk.PAGE_UP:
			  case dk.UP_ARROW:
				if (this._isShowingNow) {
					this._announceOption(pw.getHighlightedOption());
				}
				dojo.stopEvent(evt);
				this._prev_key_backspace = false;
				this._prev_key_esc = false;
				break;
			  case dk.ENTER:
				var highlighted;
				if (this._isShowingNow && (highlighted = pw.getHighlightedOption())) {
					if (highlighted == pw.nextButton) {
						this._nextSearch(1);
						dojo.stopEvent(evt);
						break;
					} else {
						if (highlighted == pw.previousButton) {
							this._nextSearch(-1);
							dojo.stopEvent(evt);
							break;
						}
					}
				} else {
					this.setDisplayedValue(this.getDisplayedValue());
				}
				evt.preventDefault();
			  case dk.TAB:
				var newvalue = this.getDisplayedValue();
				if (pw && (newvalue == pw._messages["previousMessage"] || newvalue == pw._messages["nextMessage"])) {
					break;
				}
				if (this._isShowingNow) {
					this._prev_key_backspace = false;
					this._prev_key_esc = false;
					if (pw.getHighlightedOption()) {
						pw.setValue({target:pw.getHighlightedOption()}, true);
					}
					this._hideResultList();
				}
				break;
			  case dk.SPACE:
				this._prev_key_backspace = false;
				this._prev_key_esc = false;
				if (this._isShowingNow && pw.getHighlightedOption()) {
					dojo.stopEvent(evt);
					this._selectOption();
					this._hideResultList();
				} else {
					doSearch = true;
				}
				break;
			  case dk.ESCAPE:
				this._prev_key_backspace = false;
				this._prev_key_esc = true;
				if (this._isShowingNow) {
					dojo.stopEvent(evt);
					this._hideResultList();
				}
				this.inherited(arguments);
				break;
			  case dk.DELETE:
			  case dk.BACKSPACE:
				this._prev_key_esc = false;
				this._prev_key_backspace = true;
				doSearch = true;
				break;
			  case dk.RIGHT_ARROW:
			  case dk.LEFT_ARROW:
				this._prev_key_backspace = false;
				this._prev_key_esc = false;
				break;
			  default:
				this._prev_key_backspace = false;
				this._prev_key_esc = false;
				if (dojo.isIE || evt.charCode != 0) {
					doSearch = true;
				}
			}
			if (this.searchTimer) {
				clearTimeout(this.searchTimer);
			}
			if (doSearch) {
				setTimeout(dojo.hitch(this, "_startSearchFromInput"), 1);
			}
		}, _autoCompleteText:function (text) {
			var fn = this.focusNode;
			dijit.selectInputText(fn, fn.value.length);
			var caseFilter = this.ignoreCase ? "toLowerCase" : "substr";
			if (text[caseFilter](0).indexOf(this.focusNode.value[caseFilter](0)) == 0) {
				var cpos = this._getCaretPos(fn);
				if ((cpos + 1) > fn.value.length) {
					fn.value = text;
					dijit.selectInputText(fn, cpos);
				}
			} else {
				fn.value = text;
				dijit.selectInputText(fn);
			}
		}, _openResultList:function (results, dataObject) {
			if (this.disabled || this.readOnly || (dataObject.query[this.searchAttr] != this._lastQuery)) {
				return;
			}
			this._popupWidget.clearResultList();
			if (!results.length) {
				this._hideResultList();
				return;
			}
			var zerothvalue = new String(this.store.getValue(results[0], this.searchAttr));
			if (zerothvalue && this.autoComplete && !this._prev_key_backspace && (dataObject.query[this.searchAttr] != "*")) {
				this._autoCompleteText(zerothvalue);
			}
			this._popupWidget.createOptions(results, dataObject, dojo.hitch(this, "_getMenuLabelFromItem"));
			this._showResultList();
			if (dataObject.direction) {
				if (1 == dataObject.direction) {
					this._popupWidget.highlightFirstOption();
				} else {
					if (-1 == dataObject.direction) {
						this._popupWidget.highlightLastOption();
					}
				}
				this._announceOption(this._popupWidget.getHighlightedOption());
			}
		}, _showResultList:function () {
			this._hideResultList();
			var items = this._popupWidget.getItems(), visibleCount = Math.min(items.length, this.maxListLength);
			this._arrowPressed();
			this.displayMessage("");
			with (this._popupWidget.domNode.style) {
				width = "";
				height = "";
			}
			var best = this.open();
			var popupbox = dojo.marginBox(this._popupWidget.domNode);
			this._popupWidget.domNode.style.overflow = ((best.h == popupbox.h) && (best.w == popupbox.w)) ? "hidden" : "auto";
			var newwidth = best.w;
			if (best.h < this._popupWidget.domNode.scrollHeight) {
				newwidth += 16;
			}
			dojo.marginBox(this._popupWidget.domNode, {h:best.h, w:Math.max(newwidth, this.domNode.offsetWidth)});
			dijit.setWaiState(this.comboNode, "expanded", "true");
		}, _hideResultList:function () {
			if (this._isShowingNow) {
				dijit.popup.close(this._popupWidget);
				this._arrowIdle();
				this._isShowingNow = false;
				dijit.setWaiState(this.comboNode, "expanded", "false");
				dijit.removeWaiState(this.focusNode, "activedescendant");
			}
		}, _setBlurValue:function () {
			var newvalue = this.getDisplayedValue();
			var pw = this._popupWidget;
			if (pw && (newvalue == pw._messages["previousMessage"] || newvalue == pw._messages["nextMessage"])) {
				this.setValue(this._lastValueReported, true);
			} else {
				this.setDisplayedValue(newvalue);
			}
		}, _onBlur:function () {
			this._hideResultList();
			this._arrowIdle();
			this.inherited(arguments);
		}, _announceOption:function (node) {
			if (node == null) {
				return;
			}
			var newValue;
			if (node == this._popupWidget.nextButton || node == this._popupWidget.previousButton) {
				newValue = node.innerHTML;
			} else {
				newValue = this.store.getValue(node.item, this.searchAttr);
			}
			this.focusNode.value = this.focusNode.value.substring(0, this._getCaretPos(this.focusNode));
			dijit.setWaiState(this.focusNode, "activedescendant", dojo.attr(node, "id"));
			this._autoCompleteText(newValue);
		}, _selectOption:function (evt) {
			var tgt = null;
			if (!evt) {
				evt = {target:this._popupWidget.getHighlightedOption()};
			}
			if (!evt.target) {
				this.setDisplayedValue(this.getDisplayedValue());
				return;
			} else {
				tgt = evt.target;
			}
			if (!evt.noHide) {
				this._hideResultList();
				this._setCaretPos(this.focusNode, this.store.getValue(tgt.item, this.searchAttr).length);
			}
			this._doSelect(tgt);
		}, _doSelect:function (tgt) {
			this.item = tgt.item;
			this.setValue(this.store.getValue(tgt.item, this.searchAttr), true);
		}, _onArrowMouseDown:function (evt) {
			if (this.disabled || this.readOnly) {
				return;
			}
			dojo.stopEvent(evt);
			this.focus();
			if (this._isShowingNow) {
				this._hideResultList();
			} else {
				this._startSearch("");
			}
		}, _startSearchFromInput:function () {
			this._startSearch(this.focusNode.value);
		}, _getQueryString:function (text) {
			return dojo.string.substitute(this.queryExpr, [text]);
		}, _startSearch:function (key) {
			if (!this._popupWidget) {
				var popupId = this.id + "_popup";
				this._popupWidget = new dijit.form._ComboBoxMenu({onChange:dojo.hitch(this, this._selectOption), id:popupId});
				dijit.removeWaiState(this.focusNode, "activedescendant");
				dijit.setWaiState(this.textbox, "owns", popupId);
			}
			this.item = null;
			var query = dojo.clone(this.query);
			this._lastQuery = query[this.searchAttr] = this._getQueryString(key);
			this.searchTimer = setTimeout(dojo.hitch(this, function (query, _this) {
				var dataObject = this.store.fetch({queryOptions:{ignoreCase:this.ignoreCase, deep:true}, query:query, onComplete:dojo.hitch(this, "_openResultList"), onError:function (errText) {
					console.error("dijit.form.ComboBox: " + errText);
					dojo.hitch(_this, "_hideResultList")();
				}, start:0, count:this.pageSize});
				var nextSearch = function (dataObject, direction) {
					dataObject.start += dataObject.count * direction;
					dataObject.direction = direction;
					this.store.fetch(dataObject);
				};
				this._nextSearch = this._popupWidget.onPage = dojo.hitch(this, nextSearch, dataObject);
			}, query, this), this.searchDelay);
		}, _getValueField:function () {
			return this.searchAttr;
		}, _arrowPressed:function () {
			if (!this.disabled && !this.readOnly && this.hasDownArrow) {
				dojo.addClass(this.downArrowNode, "dijitArrowButtonActive");
			}
		}, _arrowIdle:function () {
			if (!this.disabled && !this.readOnly && this.hasDownArrow) {
				dojo.removeClass(this.downArrowNode, "dojoArrowButtonPushed");
			}
		}, compositionend:function (evt) {
			this.onkeypress({charCode:-1});
		}, constructor:function () {
			this.query = {};
		}, postMixInProperties:function () {
			if (!this.hasDownArrow) {
				this.baseClass = "dijitTextBox";
			}
			if (!this.store) {
				var srcNodeRef = this.srcNodeRef;
				this.store = new dijit.form._ComboBoxDataStore(srcNodeRef);
				if (!this.value || ((typeof srcNodeRef.selectedIndex == "number") && srcNodeRef.selectedIndex.toString() === this.value)) {
					var item = this.store.fetchSelectedItem();
					if (item) {
						this.value = this.store.getValue(item, this._getValueField());
					}
				}
			}
		}, _postCreate:function () {
			var label = dojo.query("label[for=\"" + this.id + "\"]");
			if (label.length) {
				label[0].id = (this.id + "_label");
				var cn = this.comboNode;
				dijit.setWaiState(cn, "labelledby", label[0].id);
				dijit.setWaiState(cn, "disabled", this.disabled);
			}
		}, uninitialize:function () {
			if (this._popupWidget) {
				this._hideResultList();
				this._popupWidget.destroy();
			}
		}, _getMenuLabelFromItem:function (item) {
			return {html:false, label:this.store.getValue(item, this.searchAttr)};
		}, open:function () {
			this._isShowingNow = true;
			return dijit.popup.open({popup:this._popupWidget, around:this.domNode, parent:this});
		}, reset:function () {
			this.item = null;
			this.inherited(arguments);
		}});
		dojo.declare("dijit.form._ComboBoxMenu", [dijit._Widget, dijit._Templated], {templateString:"<ul class='dijitMenu' dojoAttachEvent='onmousedown:_onMouseDown,onmouseup:_onMouseUp,onmouseover:_onMouseOver,onmouseout:_onMouseOut' tabIndex='-1' style='overflow:\"auto\";'>" + "<li class='dijitMenuItem dijitMenuPreviousButton' dojoAttachPoint='previousButton'></li>" + "<li class='dijitMenuItem dijitMenuNextButton' dojoAttachPoint='nextButton'></li>" + "</ul>", _messages:null, postMixInProperties:function () {
			this._messages = dojo.i18n.getLocalization("dijit.form", "ComboBox", this.lang);
			this.inherited("postMixInProperties", arguments);
		}, setValue:function (value) {
			this.value = value;
			this.onChange(value);
		}, onChange:function (value) {
		}, onPage:function (direction) {
		}, postCreate:function () {
			this.previousButton.innerHTML = this._messages["previousMessage"];
			this.nextButton.innerHTML = this._messages["nextMessage"];
			this.inherited("postCreate", arguments);
		}, onClose:function () {
			this._blurOptionNode();
		}, _createOption:function (item, labelFunc) {
			var labelObject = labelFunc(item);
			var menuitem = dojo.doc.createElement("li");
			dijit.setWaiRole(menuitem, "option");
			if (labelObject.html) {
				menuitem.innerHTML = labelObject.label;
			} else {
				menuitem.appendChild(dojo.doc.createTextNode(labelObject.label));
			}
			if (menuitem.innerHTML == "") {
				menuitem.innerHTML = "&nbsp;";
			}
			menuitem.item = item;
			return menuitem;
		}, createOptions:function (results, dataObject, labelFunc) {
			this.previousButton.style.display = (dataObject.start == 0) ? "none" : "";
			dojo.attr(this.previousButton, "id", this.id + "_prev");
			dojo.forEach(results, function (item, i) {
				var menuitem = this._createOption(item, labelFunc);
				menuitem.className = "dijitMenuItem";
				dojo.attr(menuitem, "id", this.id + i);
				this.domNode.insertBefore(menuitem, this.nextButton);
			}, this);
			this.nextButton.style.display = (dataObject.count == results.length) ? "" : "none";
			dojo.attr(this.nextButton, "id", this.id + "_next");
		}, clearResultList:function () {
			while (this.domNode.childNodes.length > 2) {
				this.domNode.removeChild(this.domNode.childNodes[this.domNode.childNodes.length - 2]);
			}
		}, getItems:function () {
			return this.domNode.childNodes;
		}, getListLength:function () {
			return this.domNode.childNodes.length - 2;
		}, _onMouseDown:function (evt) {
			dojo.stopEvent(evt);
		}, _onMouseUp:function (evt) {
			if (evt.target === this.domNode) {
				return;
			} else {
				if (evt.target == this.previousButton) {
					this.onPage(-1);
				} else {
					if (evt.target == this.nextButton) {
						this.onPage(1);
					} else {
						var tgt = evt.target;
						while (!tgt.item) {
							tgt = tgt.parentNode;
						}
						this.setValue({target:tgt}, true);
					}
				}
			}
		}, _onMouseOver:function (evt) {
			if (evt.target === this.domNode) {
				return;
			}
			var tgt = evt.target;
			if (!(tgt == this.previousButton || tgt == this.nextButton)) {
				while (!tgt.item) {
					tgt = tgt.parentNode;
				}
			}
			this._focusOptionNode(tgt);
		}, _onMouseOut:function (evt) {
			if (evt.target === this.domNode) {
				return;
			}
			this._blurOptionNode();
		}, _focusOptionNode:function (node) {
			if (this._highlighted_option != node) {
				this._blurOptionNode();
				this._highlighted_option = node;
				dojo.addClass(this._highlighted_option, "dijitMenuItemHover");
			}
		}, _blurOptionNode:function () {
			if (this._highlighted_option) {
				dojo.removeClass(this._highlighted_option, "dijitMenuItemHover");
				this._highlighted_option = null;
			}
		}, _highlightNextOption:function () {
			var fc = this.domNode.firstChild;
			if (!this.getHighlightedOption()) {
				this._focusOptionNode(fc.style.display == "none" ? fc.nextSibling : fc);
			} else {
				var ns = this._highlighted_option.nextSibling;
				if (ns && ns.style.display != "none") {
					this._focusOptionNode(ns);
				}
			}
			dijit.scrollIntoView(this._highlighted_option);
		}, highlightFirstOption:function () {
			this._focusOptionNode(this.domNode.firstChild.nextSibling);
			dijit.scrollIntoView(this._highlighted_option);
		}, highlightLastOption:function () {
			this._focusOptionNode(this.domNode.lastChild.previousSibling);
			dijit.scrollIntoView(this._highlighted_option);
		}, _highlightPrevOption:function () {
			var lc = this.domNode.lastChild;
			if (!this.getHighlightedOption()) {
				this._focusOptionNode(lc.style.display == "none" ? lc.previousSibling : lc);
			} else {
				var ps = this._highlighted_option.previousSibling;
				if (ps && ps.style.display != "none") {
					this._focusOptionNode(ps);
				}
			}
			dijit.scrollIntoView(this._highlighted_option);
		}, _page:function (up) {
			var scrollamount = 0;
			var oldscroll = this.domNode.scrollTop;
			var height = dojo.style(this.domNode, "height");
			if (!this.getHighlightedOption()) {
				this._highlightNextOption();
			}
			while (scrollamount < height) {
				if (up) {
					if (!this.getHighlightedOption().previousSibling || this._highlighted_option.previousSibling.style.display == "none") {
						break;
					}
					this._highlightPrevOption();
				} else {
					if (!this.getHighlightedOption().nextSibling || this._highlighted_option.nextSibling.style.display == "none") {
						break;
					}
					this._highlightNextOption();
				}
				var newscroll = this.domNode.scrollTop;
				scrollamount += (newscroll - oldscroll) * (up ? -1 : 1);
				oldscroll = newscroll;
			}
		}, pageUp:function () {
			this._page(true);
		}, pageDown:function () {
			this._page(false);
		}, getHighlightedOption:function () {
			var ho = this._highlighted_option;
			return (ho && ho.parentNode) ? ho : null;
		}, handleKey:function (evt) {
			switch (evt.keyCode) {
			  case dojo.keys.DOWN_ARROW:
				this._highlightNextOption();
				break;
			  case dojo.keys.PAGE_DOWN:
				this.pageDown();
				break;
			  case dojo.keys.UP_ARROW:
				this._highlightPrevOption();
				break;
			  case dojo.keys.PAGE_UP:
				this.pageUp();
				break;
			}
		}});
		dojo.declare("dijit.form.ComboBox", [dijit.form.ValidationTextBox, dijit.form.ComboBoxMixin], {postMixInProperties:function () {
			dijit.form.ComboBoxMixin.prototype.postMixInProperties.apply(this, arguments);
			dijit.form.ValidationTextBox.prototype.postMixInProperties.apply(this, arguments);
		}, postCreate:function () {
			dijit.form.ComboBoxMixin.prototype._postCreate.apply(this, arguments);
			dijit.form.ValidationTextBox.prototype.postCreate.apply(this, arguments);
		}, setAttribute:function (attr, value) {
			dijit.form.ValidationTextBox.prototype.setAttribute.apply(this, arguments);
			dijit.form.ComboBoxMixin.prototype._setAttribute.apply(this, arguments);
		}});
		dojo.declare("dijit.form._ComboBoxDataStore", null, {constructor:function (root) {
			this.root = root;
		}, getValue:function (item, attribute, defaultValue) {
			return (attribute == "value") ? item.value : (item.innerText || item.textContent || "");
		}, isItemLoaded:function (something) {
			return true;
		}, fetch:function (args) {
			var query = "^" + args.query.name.replace(/([\\\|\(\)\[\{\^\$\+\?\.\<\>])/g, "\\$1").replace("*", ".*") + "$", matcher = new RegExp(query, args.queryOptions.ignoreCase ? "i" : ""), items = dojo.query("> option", this.root).filter(function (option) {
				return (option.innerText || option.textContent || "").match(matcher);
			});
			var start = args.start || 0, end = ("count" in args && args.count != Infinity) ? (start + args.count) : items.length;
			args.onComplete(items.slice(start, end), args);
			return args;
		}, close:function (request) {
			return;
		}, getLabel:function (item) {
			return item.innerHTML;
		}, getIdentity:function (item) {
			return dojo.attr(item, "value");
		}, fetchItemByIdentity:function (args) {
			var item = dojo.query("option[value='" + args.identity + "']", this.root)[0];
			args.onItem(item);
		}, fetchSelectedItem:function () {
			var root = this.root, si = root.selectedIndex;
			return dojo.query("> option:nth-child(" + (si != -1 ? si + 1 : 1) + ")", root)[0];
		}});
	}
	if (!dojo._hasResource["dijit.form.FilteringSelect"]) {
		dojo._hasResource["dijit.form.FilteringSelect"] = true;
		dojo.provide("dijit.form.FilteringSelect");
		dojo.declare("dijit.form.FilteringSelect", [dijit.form.MappedTextBox, dijit.form.ComboBoxMixin], {labelAttr:"", labelType:"text", _isvalid:true, _lastDisplayedValue:"", isValid:function () {
			return this._isvalid;
		}, _callbackSetLabel:function (result, dataObject, priorityChange) {
			if (dataObject && dataObject.query[this.searchAttr] != this._lastQuery) {
				return;
			}
			if (!result.length) {
				if (!this._focused) {
					this.valueNode.value = "";
				}
				dijit.form.TextBox.superclass.setValue.call(this, undefined, !this._focused);
				this._isvalid = false;
				this.validate(this._focused);
			} else {
				this._setValueFromItem(result[0], priorityChange);
			}
		}, _openResultList:function (results, dataObject) {
			if (dataObject.query[this.searchAttr] != this._lastQuery) {
				return;
			}
			this._isvalid = results.length != 0;
			this.validate(true);
			dijit.form.ComboBoxMixin.prototype._openResultList.apply(this, arguments);
		}, getValue:function () {
			return this.valueNode.value;
		}, _getValueField:function () {
			return "value";
		}, _setValue:function (value, displayedValue, priorityChange) {
			this.valueNode.value = value;
			dijit.form.FilteringSelect.superclass.setValue.call(this, value, priorityChange, displayedValue);
			this._lastDisplayedValue = displayedValue;
		}, setValue:function (value, priorityChange) {
			var self = this;
			var handleFetchByIdentity = function (item, priorityChange) {
				if (item) {
					if (self.store.isItemLoaded(item)) {
						self._callbackSetLabel([item], undefined, priorityChange);
					} else {
						self.store.loadItem({item:item, onItem:function (result, dataObject) {
							self._callbackSetLabel(result, dataObject, priorityChange);
						}});
					}
				} else {
					self._isvalid = false;
					self.validate(false);
				}
			};
			this.store.fetchItemByIdentity({identity:value, onItem:function (item) {
				handleFetchByIdentity(item, priorityChange);
			}});
		}, _setValueFromItem:function (item, priorityChange) {
			this._isvalid = true;
			this._setValue(this.store.getIdentity(item), this.labelFunc(item, this.store), priorityChange);
		}, labelFunc:function (item, store) {
			return store.getValue(item, this.searchAttr);
		}, _doSelect:function (tgt) {
			this.item = tgt.item;
			this._setValueFromItem(tgt.item, true);
		}, setDisplayedValue:function (label, priorityChange) {
			if (this.store) {
				var query = dojo.clone(this.query);
				this._lastQuery = query[this.searchAttr] = label;
				this.textbox.value = label;
				this._lastDisplayedValue = label;
				var _this = this;
				this.store.fetch({query:query, queryOptions:{ignoreCase:this.ignoreCase, deep:true}, onComplete:function (result, dataObject) {
					dojo.hitch(_this, "_callbackSetLabel")(result, dataObject, priorityChange);
				}, onError:function (errText) {
					console.error("dijit.form.FilteringSelect: " + errText);
					dojo.hitch(_this, "_setValue")(undefined, label, false);
				}});
			}
		}, _getMenuLabelFromItem:function (item) {
			if (this.labelAttr) {
				return {html:this.labelType == "html", label:this.store.getValue(item, this.labelAttr)};
			} else {
				return dijit.form.ComboBoxMixin.prototype._getMenuLabelFromItem.apply(this, arguments);
			}
		}, postMixInProperties:function () {
			dijit.form.ComboBoxMixin.prototype.postMixInProperties.apply(this, arguments);
			dijit.form.MappedTextBox.prototype.postMixInProperties.apply(this, arguments);
		}, postCreate:function () {
			dijit.form.ComboBoxMixin.prototype._postCreate.apply(this, arguments);
			dijit.form.MappedTextBox.prototype.postCreate.apply(this, arguments);
		}, setAttribute:function (attr, value) {
			dijit.form.MappedTextBox.prototype.setAttribute.apply(this, arguments);
			dijit.form.ComboBoxMixin.prototype._setAttribute.apply(this, arguments);
		}, undo:function () {
			this.setDisplayedValue(this._lastDisplayedValue);
		}, _valueChanged:function () {
			return this.getDisplayedValue() != this._lastDisplayedValue;
		}});
	}
	if (!dojo._hasResource["dijit.form.CheckBox"]) {
		dojo._hasResource["dijit.form.CheckBox"] = true;
		dojo.provide("dijit.form.CheckBox");
		dojo.declare("dijit.form.CheckBox", dijit.form.ToggleButton, {templateString:"<div class=\"dijitReset dijitInline\" waiRole=\"presentation\"\n\t><input\n\t \ttype=\"${type}\" name=\"${name}\"\n\t\tclass=\"dijitReset dijitCheckBoxInput\"\n\t\tdojoAttachPoint=\"focusNode\"\n\t \tdojoAttachEvent=\"onmouseover:_onMouse,onmouseout:_onMouse,onclick:_onClick\"\n/></div>\n", baseClass:"dijitCheckBox", type:"checkbox", value:"on", setValue:function (newValue) {
			if (typeof newValue == "string") {
				this.setAttribute("value", newValue);
				newValue = true;
			}
			this.setAttribute("checked", newValue);
		}, _getValueDeprecated:false, getValue:function () {
			return (this.checked ? this.value : false);
		}, reset:function () {
			this.inherited(arguments);
			this.setAttribute("value", this._resetValueAttr);
		}, postCreate:function () {
			this.inherited(arguments);
			this._resetValueAttr = this.value;
		}});
		dojo.declare("dijit.form.RadioButton", dijit.form.CheckBox, {type:"radio", baseClass:"dijitRadio", _groups:{}, postCreate:function () {
			(this._groups[this.name] = this._groups[this.name] || []).push(this);
			this.inherited(arguments);
		}, uninitialize:function () {
			dojo.forEach(this._groups[this.name], function (widget, i, arr) {
				if (widget === this) {
					arr.splice(i, 1);
					return;
				}
			}, this);
		}, setAttribute:function (attr, value) {
			this.inherited(arguments);
			switch (attr) {
			  case "checked":
				if (this.checked) {
					dojo.forEach(this._groups[this.name], function (widget) {
						if (widget != this && widget.checked) {
							widget.setAttribute("checked", false);
						}
					}, this);
				}
			}
		}, _clicked:function (e) {
			if (!this.checked) {
				this.setAttribute("checked", true);
			}
		}});
	}
	if (!dojo._hasResource["dijit.layout.LayoutContainer"]) {
		dojo._hasResource["dijit.layout.LayoutContainer"] = true;
		dojo.provide("dijit.layout.LayoutContainer");
		dojo.declare("dijit.layout.LayoutContainer", dijit.layout._LayoutWidget, {constructor:function () {
			dojo.deprecated("dijit.layout.LayoutContainer is deprecated", "use BorderContainer instead", 2);
		}, layout:function () {
			dijit.layout.layoutChildren(this.domNode, this._contentBox, this.getChildren());
		}, addChild:function (child, insertIndex) {
			dijit._Container.prototype.addChild.apply(this, arguments);
			if (this._started) {
				dijit.layout.layoutChildren(this.domNode, this._contentBox, this.getChildren());
			}
		}, removeChild:function (widget) {
			dijit._Container.prototype.removeChild.apply(this, arguments);
			if (this._started) {
				dijit.layout.layoutChildren(this.domNode, this._contentBox, this.getChildren());
			}
		}});
		dojo.extend(dijit._Widget, {layoutAlign:"none"});
	}
	if (!dojo._hasResource["dijit.layout.BorderContainer"]) {
		dojo._hasResource["dijit.layout.BorderContainer"] = true;
		dojo.provide("dijit.layout.BorderContainer");
		dojo.declare("dijit.layout.BorderContainer", dijit.layout._LayoutWidget, {design:"headline", liveSplitters:true, persist:false, _splitterClass:"dijit.layout._Splitter", postCreate:function () {
			this.inherited(arguments);
			this._splitters = {};
			this._splitterThickness = {};
			dojo.addClass(this.domNode, "dijitBorderContainer");
		}, startup:function () {
			if (this._started) {
				return;
			}
			dojo.forEach(this.getChildren(), this._setupChild, this);
			this.inherited(arguments);
		}, _setupChild:function (child) {
			var region = child.region;
			if (region) {
				child.domNode.style.position = "absolute";
				var ltr = this.isLeftToRight();
				if (region == "leading") {
					region = ltr ? "left" : "right";
				}
				if (region == "trailing") {
					region = ltr ? "right" : "left";
				}
				this["_" + region] = child.domNode;
				this["_" + region + "Widget"] = child;
				if (child.splitter) {
					var _Splitter = dojo.getObject(this._splitterClass);
					var flip = {left:"right", right:"left", top:"bottom", bottom:"top", leading:"trailing", trailing:"leading"};
					var oppNodeList = dojo.query("[region=" + flip[child.region] + "]", this.domNode);
					var splitter = new _Splitter({container:this, child:child, region:region, oppNode:oppNodeList[0], live:this.liveSplitters});
					this._splitters[region] = splitter.domNode;
					dojo.place(splitter.domNode, child.domNode, "after");
					this._computeSplitterThickness(region);
				}
				child.region = region;
			}
		}, _computeSplitterThickness:function (region) {
			var re = new RegExp("top|bottom");
			this._splitterThickness[region] = dojo.marginBox(this._splitters[region])[(re.test(region) ? "h" : "w")];
		}, layout:function () {
			this._layoutChildren();
		}, addChild:function (child, insertIndex) {
			this.inherited(arguments);
			this._setupChild(child);
			if (this._started) {
				this._layoutChildren();
			}
		}, removeChild:function (child) {
			var region = child.region;
			var splitter = this._splitters[region];
			if (splitter) {
				dijit.byNode(splitter).destroy();
				delete this._splitters[region];
				delete this._splitterThickness[region];
			}
			this.inherited(arguments);
			delete this["_" + region];
			delete this["_" + region + "Widget"];
			if (this._started) {
				this._layoutChildren(child.region);
			}
		}, _layoutChildren:function (changedRegion) {
			var sidebarLayout = (this.design == "sidebar");
			var topHeight = 0, bottomHeight = 0, leftWidth = 0, rightWidth = 0;
			var topStyle = {}, leftStyle = {}, rightStyle = {}, bottomStyle = {}, centerStyle = (this._center && this._center.style) || {};
			var changedSide = /left|right/.test(changedRegion);
			var layoutSides = !changedRegion || (!changedSide && !sidebarLayout);
			var layoutTopBottom = !changedRegion || (changedSide && sidebarLayout);
			if (this._top) {
				topStyle = layoutTopBottom && this._top.style;
				topHeight = dojo.marginBox(this._top).h;
			}
			if (this._left) {
				leftStyle = layoutSides && this._left.style;
				leftWidth = dojo.marginBox(this._left).w;
			}
			if (this._right) {
				rightStyle = layoutSides && this._right.style;
				rightWidth = dojo.marginBox(this._right).w;
			}
			if (this._bottom) {
				bottomStyle = layoutTopBottom && this._bottom.style;
				bottomHeight = dojo.marginBox(this._bottom).h;
			}
			var splitters = this._splitters;
			var topSplitter = splitters.top;
			var bottomSplitter = splitters.bottom;
			var leftSplitter = splitters.left;
			var rightSplitter = splitters.right;
			var splitterThickness = this._splitterThickness;
			var topSplitterThickness = splitterThickness.top || 0;
			var leftSplitterThickness = splitterThickness.left || 0;
			var rightSplitterThickness = splitterThickness.right || 0;
			var bottomSplitterThickness = splitterThickness.bottom || 0;
			if (leftSplitterThickness > 50 || rightSplitterThickness > 50) {
				setTimeout(dojo.hitch(this, function () {
					for (var region in this._splitters) {
						this._computeSplitterThickness(region);
					}
					this._layoutChildren();
				}), 50);
				return false;
			}
			var splitterBounds = {left:(sidebarLayout ? leftWidth + leftSplitterThickness : "0") + "px", right:(sidebarLayout ? rightWidth + rightSplitterThickness : "0") + "px"};
			if (topSplitter) {
				dojo.mixin(topSplitter.style, splitterBounds);
				topSplitter.style.top = topHeight + "px";
			}
			if (bottomSplitter) {
				dojo.mixin(bottomSplitter.style, splitterBounds);
				bottomSplitter.style.bottom = bottomHeight + "px";
			}
			splitterBounds = {top:(sidebarLayout ? "0" : topHeight + topSplitterThickness) + "px", bottom:(sidebarLayout ? "0" : bottomHeight + bottomSplitterThickness) + "px"};
			if (leftSplitter) {
				dojo.mixin(leftSplitter.style, splitterBounds);
				leftSplitter.style.left = leftWidth + "px";
			}
			if (rightSplitter) {
				dojo.mixin(rightSplitter.style, splitterBounds);
				rightSplitter.style.right = rightWidth + "px";
			}
			dojo.mixin(centerStyle, {top:topHeight + topSplitterThickness + "px", left:leftWidth + leftSplitterThickness + "px", right:rightWidth + rightSplitterThickness + "px", bottom:bottomHeight + bottomSplitterThickness + "px"});
			var bounds = {top:sidebarLayout ? "0" : centerStyle.top, bottom:sidebarLayout ? "0" : centerStyle.bottom};
			dojo.mixin(leftStyle, bounds);
			dojo.mixin(rightStyle, bounds);
			leftStyle.left = rightStyle.right = topStyle.top = bottomStyle.bottom = "0";
			if (sidebarLayout) {
				topStyle.left = bottomStyle.left = leftWidth + (this.isLeftToRight() ? leftSplitterThickness : 0) + "px";
				topStyle.right = bottomStyle.right = rightWidth + (this.isLeftToRight() ? 0 : rightSplitterThickness) + "px";
			} else {
				topStyle.left = topStyle.right = bottomStyle.left = bottomStyle.right = "0";
			}
			var janky = dojo.isIE || dojo.some(this.getChildren(), function (child) {
				return child.domNode.tagName == "TEXTAREA";
			});
			if (janky) {
				var borderBox = function (n, b) {
					n = dojo.byId(n);
					var s = dojo.getComputedStyle(n);
					if (!b) {
						return dojo._getBorderBox(n, s);
					}
					var me = dojo._getMarginExtents(n, s);
					dojo._setMarginBox(n, b.l, b.t, b.w + me.w, b.h + me.h, s);
					return null;
				};
				var resizeWidget = function (widget, dim) {
					if (widget) {
						widget.resize ? widget.resize(dim) : dojo.marginBox(widget.domNode, dim);
					}
				};
				var thisBorderBox = borderBox(this.domNode);
				var containerHeight = thisBorderBox.h;
				var middleHeight = containerHeight;
				if (this._top) {
					middleHeight -= topHeight;
				}
				if (this._bottom) {
					middleHeight -= bottomHeight;
				}
				if (topSplitter) {
					middleHeight -= topSplitterThickness;
				}
				if (bottomSplitter) {
					middleHeight -= bottomSplitterThickness;
				}
				var centerDim = {h:middleHeight};
				var sidebarHeight = sidebarLayout ? containerHeight : middleHeight;
				if (leftSplitter) {
					leftSplitter.style.height = sidebarHeight;
				}
				if (rightSplitter) {
					rightSplitter.style.height = sidebarHeight;
				}
				resizeWidget(this._leftWidget, {h:sidebarHeight});
				resizeWidget(this._rightWidget, {h:sidebarHeight});
				var containerWidth = thisBorderBox.w;
				var middleWidth = containerWidth;
				if (this._left) {
					middleWidth -= leftWidth;
				}
				if (this._right) {
					middleWidth -= rightWidth;
				}
				if (leftSplitter) {
					middleWidth -= leftSplitterThickness;
				}
				if (rightSplitter) {
					middleWidth -= rightSplitterThickness;
				}
				centerDim.w = middleWidth;
				var sidebarWidth = sidebarLayout ? middleWidth : containerWidth;
				if (topSplitter) {
					topSplitter.style.width = sidebarWidth;
				}
				if (bottomSplitter) {
					bottomSplitter.style.width = sidebarWidth;
				}
				resizeWidget(this._topWidget, {w:sidebarWidth});
				resizeWidget(this._bottomWidget, {w:sidebarWidth});
				resizeWidget(this._centerWidget, centerDim);
			} else {
				var resizeList = {};
				if (changedRegion) {
					resizeList[changedRegion] = resizeList.center = true;
					if (/top|bottom/.test(changedRegion) && this.design != "sidebar") {
						resizeList.left = resizeList.right = true;
					} else {
						if (/left|right/.test(changedRegion) && this.design == "sidebar") {
							resizeList.top = resizeList.bottom = true;
						}
					}
				}
				dojo.forEach(this.getChildren(), function (child) {
					if (child.resize && (!changedRegion || child.region in resizeList)) {
						child.resize();
					}
				}, this);
			}
		}});
		dojo.extend(dijit._Widget, {region:"", splitter:false, minSize:0, maxSize:Infinity});
		dojo.declare("dijit.layout._Splitter", [dijit._Widget, dijit._Templated], {live:true, templateString:"<div class=\"dijitSplitter\" dojoAttachEvent=\"onkeypress:_onKeyPress,onmousedown:_startDrag\" tabIndex=\"0\" waiRole=\"separator\"><div class=\"dijitSplitterThumb\"></div></div>", postCreate:function () {
			this.inherited(arguments);
			this.horizontal = /top|bottom/.test(this.region);
			dojo.addClass(this.domNode, "dijitSplitter" + (this.horizontal ? "H" : "V"));
			this._factor = /top|left/.test(this.region) ? 1 : -1;
			this._minSize = this.child.minSize;
			this._computeMaxSize();
			this.connect(this.container, "layout", dojo.hitch(this, this._computeMaxSize));
			this._cookieName = this.container.id + "_" + this.region;
			if (this.container.persist) {
				var persistSize = dojo.cookie(this._cookieName);
				if (persistSize) {
					this.child.domNode.style[this.horizontal ? "height" : "width"] = persistSize;
				}
			}
		}, _computeMaxSize:function () {
			var dim = this.horizontal ? "h" : "w";
			var available = dojo.contentBox(this.container.domNode)[dim] - (this.oppNode ? dojo.marginBox(this.oppNode)[dim] : 0);
			this._maxSize = Math.min(this.child.maxSize, available);
		}, _startDrag:function (e) {
			if (!this.cover) {
				this.cover = dojo.doc.createElement("div");
				dojo.addClass(this.cover, "dijitSplitterCover");
				dojo.place(this.cover, this.child.domNode, "after");
			} else {
				this.cover.style.zIndex = 1;
			}
			if (this.fake) {
				dojo._destroyElement(this.fake);
			}
			if (!(this._resize = this.live)) {
				(this.fake = this.domNode.cloneNode(true)).removeAttribute("id");
				dojo.addClass(this.domNode, "dijitSplitterShadow");
				dojo.place(this.fake, this.domNode, "after");
			}
			dojo.addClass(this.domNode, "dijitSplitterActive");
			var factor = this._factor, max = this._maxSize, min = this._minSize || 10;
			var axis = this.horizontal ? "pageY" : "pageX";
			var pageStart = e[axis];
			var splitterStyle = this.domNode.style;
			var dim = this.horizontal ? "h" : "w";
			var childStart = dojo.marginBox(this.child.domNode)[dim];
			var splitterStart = parseInt(this.domNode.style[this.region]);
			var resize = this._resize;
			var region = this.region;
			var mb = {};
			var childNode = this.child.domNode;
			var layoutFunc = dojo.hitch(this.container, this.container._layoutChildren);
			var de = dojo.doc.body;
			this._handlers = (this._handlers || []).concat([dojo.connect(de, "onmousemove", this._drag = function (e, forceResize) {
				var delta = e[axis] - pageStart, childSize = factor * delta + childStart, boundChildSize = Math.max(Math.min(childSize, max), min);
				if (resize || forceResize) {
					mb[dim] = boundChildSize;
					dojo.marginBox(childNode, mb);
					layoutFunc(region);
				}
				splitterStyle[region] = factor * delta + splitterStart + (boundChildSize - childSize) + "px";
			}), dojo.connect(de, "onmouseup", this, "_stopDrag")]);
			dojo.stopEvent(e);
		}, _stopDrag:function (e) {
			try {
				if (this.cover) {
					this.cover.style.zIndex = -1;
				}
				if (this.fake) {
					dojo._destroyElement(this.fake);
				}
				dojo.removeClass(this.domNode, "dijitSplitterActive");
				dojo.removeClass(this.domNode, "dijitSplitterShadow");
				this._drag(e);
				this._drag(e, true);
			}
			finally {
				this._cleanupHandlers();
				delete this._drag;
			}
			if (this.container.persist) {
				dojo.cookie(this._cookieName, this.child.domNode.style[this.horizontal ? "height" : "width"]);
			}
		}, _cleanupHandlers:function () {
			dojo.forEach(this._handlers, dojo.disconnect);
			delete this._handlers;
		}, _onKeyPress:function (e) {
			this._resize = true;
			var horizontal = this.horizontal;
			var tick = 1;
			var dk = dojo.keys;
			switch (e.keyCode) {
			  case horizontal ? dk.UP_ARROW : dk.LEFT_ARROW:
				tick *= -1;
				break;
			  case horizontal ? dk.DOWN_ARROW : dk.RIGHT_ARROW:
				break;
			  default:
				return;
			}
			var childSize = dojo.marginBox(this.child.domNode)[horizontal ? "h" : "w"] + this._factor * tick;
			var mb = {};
			mb[this.horizontal ? "h" : "w"] = Math.max(Math.min(childSize, this._maxSize), this._minSize);
			dojo.marginBox(this.child.domNode, mb);
			this.container._layoutChildren(this.region);
			dojo.stopEvent(e);
		}, destroy:function () {
			this._cleanupHandlers();
			delete this.child;
			delete this.container;
			delete this.fake;
			this.inherited(arguments);
		}});
	}
	if (!dojo._hasResource["dojox.layout.ContentPane"]) {
		dojo._hasResource["dojox.layout.ContentPane"] = true;
		dojo.provide("dojox.layout.ContentPane");
		(function () {
			if (dojo.isIE) {
				var alphaImageLoader = /(AlphaImageLoader\([^)]*?src=(['"]))(?![a-z]+:|\/)([^\r\n;}]+?)(\2[^)]*\)\s*[;}]?)/g;
			}
			var cssPaths = /(?:(?:@import\s*(['"])(?![a-z]+:|\/)([^\r\n;{]+?)\1)|url\(\s*(['"]?)(?![a-z]+:|\/)([^\r\n;]+?)\3\s*\))([a-z, \s]*[;}]?)/g;
			function adjustCssPaths(cssUrl, cssText) {
				if (!cssText || !cssUrl) {
					return;
				}
				if (alphaImageLoader) {
					cssText = cssText.replace(alphaImageLoader, function (ignore, pre, delim, url, post) {
						return pre + (new dojo._Url(cssUrl, "./" + url).toString()) + post;
					});
				}
				return cssText.replace(cssPaths, function (ignore, delimStr, strUrl, delimUrl, urlUrl, media) {
					if (strUrl) {
						return "@import \"" + (new dojo._Url(cssUrl, "./" + strUrl).toString()) + "\"" + media;
					} else {
						return "url(" + (new dojo._Url(cssUrl, "./" + urlUrl).toString()) + ")" + media;
					}
				});
			}
			var htmlAttrPaths = /(<[a-z][a-z0-9]*\s[^>]*)(?:(href|src)=(['"]?)([^>]*?)\3|style=(['"]?)([^>]*?)\5)([^>]*>)/gi;
			function adjustHtmlPaths(htmlUrl, cont) {
				var url = htmlUrl || "./";
				return cont.replace(htmlAttrPaths, function (tag, start, name, delim, relUrl, delim2, cssText, end) {
					return start + (name ? (name + "=" + delim + (new dojo._Url(url, relUrl).toString()) + delim) : ("style=" + delim2 + adjustCssPaths(url, cssText) + delim2)) + end;
				});
			}
			function secureForInnerHtml(cont) {
				return cont.replace(/(?:\s*<!DOCTYPE\s[^>]+>|<title[^>]*>[\s\S]*?<\/title>)/ig, "");
			}
			function snarfStyles(cssUrl, cont, styles) {
				styles.attributes = [];
				return cont.replace(/(?:<style([^>]*)>([\s\S]*?)<\/style>|<link\s+(?=[^>]*rel=['"]?stylesheet)([^>]*?href=(['"])([^>]*?)\4[^>\/]*)\/?>)/gi, function (ignore, styleAttr, cssText, linkAttr, delim, href) {
					var i, attr = (styleAttr || linkAttr || "").replace(/^\s*([\s\S]*?)\s*$/i, "$1");
					if (cssText) {
						i = styles.push(cssUrl ? adjustCssPaths(cssUrl, cssText) : cssText);
					} else {
						i = styles.push("@import \"" + href + "\";");
						attr = attr.replace(/\s*(?:rel|href)=(['"])?[^\s]*\1\s*/gi, "");
					}
					if (attr) {
						attr = attr.split(/\s+/);
						var atObj = {}, tmp;
						for (var j = 0, e = attr.length; j < e; j++) {
							tmp = attr[j].split("=");
							atObj[tmp[0]] = tmp[1].replace(/^\s*['"]?([\s\S]*?)['"]?\s*$/, "$1");
						}
						styles.attributes[i - 1] = atObj;
					}
					return "";
				});
			}
			function snarfScripts(cont, byRef) {
				byRef.code = "";
				function download(src) {
					if (byRef.downloadRemote) {
						dojo.xhrGet({url:src, sync:true, load:function (code) {
							byRef.code += code + ";";
						}, error:byRef.errBack});
					}
				}
				return cont.replace(/<script\s*(?![^>]*type=['"]?dojo)(?:[^>]*?(?:src=(['"]?)([^>]*?)\1[^>]*)?)*>([\s\S]*?)<\/script>/gi, function (ignore, delim, src, code) {
					if (src) {
						download(src);
					} else {
						byRef.code += code;
					}
					return "";
				});
			}
			function evalInGlobal(code, appendNode) {
				appendNode = appendNode || dojo.doc.body;
				var n = appendNode.ownerDocument.createElement("script");
				n.type = "text/javascript";
				appendNode.appendChild(n);
				n.text = code;
			}
			dojo.declare("dojox.layout.ContentPane", dijit.layout.ContentPane, {adjustPaths:false, cleanContent:false, renderStyles:false, executeScripts:true, scriptHasHooks:false, constructor:function () {
				this.ioArgs = {};
				this.ioMethod = dojo.xhrGet;
				this.onLoadDeferred = new dojo.Deferred();
				this.onUnloadDeferred = new dojo.Deferred();
			}, postCreate:function () {
				this._setUpDeferreds();
				dijit.layout.ContentPane.prototype.postCreate.apply(this, arguments);
			}, onExecError:function (e) {
			}, setContent:function (data) {
				if (!this._isDownloaded) {
					var defObj = this._setUpDeferreds();
				}
				dijit.layout.ContentPane.prototype.setContent.apply(this, arguments);
				return defObj;
			}, cancel:function () {
				if (this._xhrDfd && this._xhrDfd.fired == -1) {
					this.onUnloadDeferred = null;
				}
				dijit.layout.ContentPane.prototype.cancel.apply(this, arguments);
			}, _setUpDeferreds:function () {
				var _t = this, cancel = function () {
					_t.cancel();
				};
				var onLoad = (_t.onLoadDeferred = new dojo.Deferred());
				var onUnload = (_t._nextUnloadDeferred = new dojo.Deferred());
				return {cancel:cancel, addOnLoad:function (func) {
					onLoad.addCallback(func);
				}, addOnUnload:function (func) {
					onUnload.addCallback(func);
				}};
			}, _onLoadHandler:function () {
				dijit.layout.ContentPane.prototype._onLoadHandler.apply(this, arguments);
				if (this.onLoadDeferred) {
					this.onLoadDeferred.callback(true);
				}
			}, _onUnloadHandler:function () {
				this.isLoaded = false;
				this.cancel();
				if (this.onUnloadDeferred) {
					this.onUnloadDeferred.callback(true);
				}
				dijit.layout.ContentPane.prototype._onUnloadHandler.apply(this, arguments);
				if (this._nextUnloadDeferred) {
					this.onUnloadDeferred = this._nextUnloadDeferred;
				}
			}, _onError:function (type, err) {
				dijit.layout.ContentPane.prototype._onError.apply(this, arguments);
				if (this.onLoadDeferred) {
					this.onLoadDeferred.errback(err);
				}
			}, _prepareLoad:function (forceLoad) {
				var defObj = this._setUpDeferreds();
				dijit.layout.ContentPane.prototype._prepareLoad.apply(this, arguments);
				return defObj;
			}, _setContent:function (cont) {
				var styles = [];
				if (dojo.isString(cont)) {
					if (this.adjustPaths && this.href) {
						cont = adjustHtmlPaths(this.href, cont);
					}
					if (this.cleanContent) {
						cont = secureForInnerHtml(cont);
					}
					if (this.renderStyles || this.cleanContent) {
						cont = snarfStyles(this.href, cont, styles);
					}
					if (this.executeScripts) {
						var _t = this, code, byRef = {downloadRemote:true, errBack:function (e) {
							_t._onError.call(_t, "Exec", "Error downloading remote script in \"" + _t.id + "\"", e);
						}};
						cont = snarfScripts(cont, byRef);
						code = byRef.code;
					}
					var node = (this.containerNode || this.domNode), pre = post = "", walk = 0;
					switch (node.nodeName.toLowerCase()) {
					  case "tr":
						pre = "<tr>";
						post = "</tr>";
						walk += 1;
					  case "tbody":
					  case "thead":
						pre = "<tbody>" + pre;
						post += "</tbody>";
						walk += 1;
					  case "table":
						pre = "<table>" + pre;
						post += "</table>";
						walk += 1;
						break;
					}
					if (walk) {
						var n = node.ownerDocument.createElement("div");
						n.innerHTML = pre + cont + post;
						do {
							n = n.firstChild;
						} while (--walk);
						cont = n.childNodes;
					}
				}
				dijit.layout.ContentPane.prototype._setContent.call(this, cont);
				if (this._styleNodes && this._styleNodes.length) {
					while (this._styleNodes.length) {
						dojo._destroyElement(this._styleNodes.pop());
					}
				}
				if (this.renderStyles && styles && styles.length) {
					this._renderStyles(styles);
				}
				if (this.executeScripts && code) {
					if (this.cleanContent) {
						code = code.replace(/(<!--|(?:\/\/)?-->|<!\[CDATA\[|\]\]>)/g, "");
					}
					if (this.scriptHasHooks) {
						code = code.replace(/_container_(?!\s*=[^=])/g, dijit._scopeName + ".byId('" + this.id + "')");
					}
					try {
						evalInGlobal(code, (this.containerNode || this.domNode));
					}
					catch (e) {
						this._onError("Exec", "Error eval script in " + this.id + ", " + e.message, e);
					}
				}
			}, _renderStyles:function (styles) {
				this._styleNodes = [];
				var st, att, cssText, doc = this.domNode.ownerDocument;
				var head = doc.getElementsByTagName("head")[0];
				for (var i = 0, e = styles.length; i < e; i++) {
					cssText = styles[i];
					att = styles.attributes[i];
					st = doc.createElement("style");
					st.setAttribute("type", "text/css");
					for (var x in att) {
						st.setAttribute(x, att[x]);
					}
					this._styleNodes.push(st);
					head.appendChild(st);
					if (st.styleSheet) {
						st.styleSheet.cssText = cssText;
					} else {
						st.appendChild(doc.createTextNode(cssText));
					}
				}
			}});
		})();
	}
	if (!dojo._hasResource["dijit.Menu"]) {
		dojo._hasResource["dijit.Menu"] = true;
		dojo.provide("dijit.Menu");
		dojo.declare("dijit.Menu", [dijit._Widget, dijit._Templated, dijit._KeyNavContainer], {constructor:function () {
			this._bindings = [];
		}, templateString:"<table class=\"dijit dijitMenu dijitReset dijitMenuTable\" waiRole=\"menu\" dojoAttachEvent=\"onkeypress:_onKeyPress\">" + "<tbody class=\"dijitReset\" dojoAttachPoint=\"containerNode\"></tbody>" + "</table>", targetNodeIds:[], contextMenuForWindow:false, leftClickToOpen:false, parentMenu:null, popupDelay:500, _contextMenuWithMouse:false, postCreate:function () {
			if (this.contextMenuForWindow) {
				this.bindDomNode(dojo.body());
			} else {
				dojo.forEach(this.targetNodeIds, this.bindDomNode, this);
			}
			this.connectKeyNavHandlers([dojo.keys.UP_ARROW], [dojo.keys.DOWN_ARROW]);
		}, startup:function () {
			if (this._started) {
				return;
			}
			dojo.forEach(this.getChildren(), function (child) {
				child.startup();
			});
			this.startupKeyNavChildren();
			this.inherited(arguments);
		}, onExecute:function () {
		}, onCancel:function (closeAll) {
		}, _moveToPopup:function (evt) {
			if (this.focusedChild && this.focusedChild.popup && !this.focusedChild.disabled) {
				this.focusedChild._onClick(evt);
			}
		}, _onKeyPress:function (evt) {
			if (evt.ctrlKey || evt.altKey) {
				return;
			}
			switch (evt.keyCode) {
			  case dojo.keys.RIGHT_ARROW:
				this._moveToPopup(evt);
				dojo.stopEvent(evt);
				break;
			  case dojo.keys.LEFT_ARROW:
				if (this.parentMenu) {
					this.onCancel(false);
				} else {
					dojo.stopEvent(evt);
				}
				break;
			}
		}, onItemHover:function (item) {
			this.focusChild(item);
			if (this.focusedChild.popup && !this.focusedChild.disabled && !this.hover_timer) {
				this.hover_timer = setTimeout(dojo.hitch(this, "_openPopup"), this.popupDelay);
			}
		}, _onChildBlur:function (item) {
			dijit.popup.close(item.popup);
			item._blur();
			this._stopPopupTimer();
		}, onItemUnhover:function (item) {
		}, _stopPopupTimer:function () {
			if (this.hover_timer) {
				clearTimeout(this.hover_timer);
				this.hover_timer = null;
			}
		}, _getTopMenu:function () {
			for (var top = this; top.parentMenu; top = top.parentMenu) {
			}
			return top;
		}, onItemClick:function (item, evt) {
			if (item.disabled) {
				return false;
			}
			if (item.popup) {
				if (!this.is_open) {
					this._openPopup();
				}
			} else {
				this.onExecute();
				item.onClick(evt);
			}
		}, _iframeContentWindow:function (iframe_el) {
			var win = dijit.getDocumentWindow(dijit.Menu._iframeContentDocument(iframe_el)) || dijit.Menu._iframeContentDocument(iframe_el)["__parent__"] || (iframe_el.name && dojo.doc.frames[iframe_el.name]) || null;
			return win;
		}, _iframeContentDocument:function (iframe_el) {
			var doc = iframe_el.contentDocument || (iframe_el.contentWindow && iframe_el.contentWindow.document) || (iframe_el.name && dojo.doc.frames[iframe_el.name] && dojo.doc.frames[iframe_el.name].document) || null;
			return doc;
		}, bindDomNode:function (node) {
			node = dojo.byId(node);
			var win = dijit.getDocumentWindow(node.ownerDocument);
			if (node.tagName.toLowerCase() == "iframe") {
				win = this._iframeContentWindow(node);
				node = dojo.withGlobal(win, dojo.body);
			}
			var cn = (node == dojo.body() ? dojo.doc : node);
			node[this.id] = this._bindings.push([dojo.connect(cn, (this.leftClickToOpen) ? "onclick" : "oncontextmenu", this, "_openMyself"), dojo.connect(cn, "onkeydown", this, "_contextKey"), dojo.connect(cn, "onmousedown", this, "_contextMouse")]);
		}, unBindDomNode:function (nodeName) {
			var node = dojo.byId(nodeName);
			if (node) {
				var bid = node[this.id] - 1, b = this._bindings[bid];
				dojo.forEach(b, dojo.disconnect);
				delete this._bindings[bid];
			}
		}, _contextKey:function (e) {
			this._contextMenuWithMouse = false;
			if (e.keyCode == dojo.keys.F10) {
				dojo.stopEvent(e);
				if (e.shiftKey && e.type == "keydown") {
					var _e = {target:e.target, pageX:e.pageX, pageY:e.pageY};
					_e.preventDefault = _e.stopPropagation = function () {
					};
					window.setTimeout(dojo.hitch(this, function () {
						this._openMyself(_e);
					}), 1);
				}
			}
		}, _contextMouse:function (e) {
			this._contextMenuWithMouse = true;
		}, _openMyself:function (e) {
			if (this.leftClickToOpen && e.button > 0) {
				return;
			}
			dojo.stopEvent(e);
			var x, y;
			if (dojo.isSafari || this._contextMenuWithMouse) {
				x = e.pageX;
				y = e.pageY;
			} else {
				var coords = dojo.coords(e.target, true);
				x = coords.x + 10;
				y = coords.y + 10;
			}
			var self = this;
			var savedFocus = dijit.getFocus(this);
			function closeAndRestoreFocus() {
				dijit.focus(savedFocus);
				dijit.popup.close(self);
			}
			dijit.popup.open({popup:this, x:x, y:y, onExecute:closeAndRestoreFocus, onCancel:closeAndRestoreFocus, orient:this.isLeftToRight() ? "L" : "R"});
			this.focus();
			this._onBlur = function () {
				this.inherited("_onBlur", arguments);
				dijit.popup.close(this);
			};
		}, onOpen:function (e) {
			this.isShowingNow = true;
		}, onClose:function () {
			this._stopPopupTimer();
			this.parentMenu = null;
			this.isShowingNow = false;
			this.currentPopup = null;
			if (this.focusedChild) {
				this._onChildBlur(this.focusedChild);
				this.focusedChild = null;
			}
		}, _openPopup:function () {
			this._stopPopupTimer();
			var from_item = this.focusedChild;
			var popup = from_item.popup;
			if (popup.isShowingNow) {
				return;
			}
			popup.parentMenu = this;
			var self = this;
			dijit.popup.open({parent:this, popup:popup, around:from_item.arrowCell, orient:this.isLeftToRight() ? {"TR":"TL", "TL":"TR"} : {"TL":"TR", "TR":"TL"}, onCancel:function () {
				dijit.popup.close(popup);
				from_item.focus();
				self.currentPopup = null;
			}});
			this.currentPopup = popup;
			if (popup.focus) {
				popup.focus();
			}
		}, uninitialize:function () {
			dojo.forEach(this.targetNodeIds, this.unBindDomNode, this);
			this.inherited(arguments);
		}});
		dojo.declare("dijit.MenuItem", [dijit._Widget, dijit._Templated, dijit._Contained], {templateString:"<tr class=\"dijitReset dijitMenuItem\" " + "dojoAttachEvent=\"onmouseenter:_onHover,onmouseleave:_onUnhover,ondijitclick:_onClick\">" + "<td class=\"dijitReset\"><div class=\"dijitMenuItemIcon ${iconClass}\" dojoAttachPoint=\"iconNode\"></div></td>" + "<td tabIndex=\"-1\" class=\"dijitReset dijitMenuItemLabel\" dojoAttachPoint=\"containerNode,focusNode\" waiRole=\"menuitem\"></td>" + "<td class=\"dijitReset\" dojoAttachPoint=\"arrowCell\">" + "<div class=\"dijitMenuExpand\" dojoAttachPoint=\"expand\" style=\"display:none\">" + "<span class=\"dijitInline dijitArrowNode dijitMenuExpandInner\">+</span>" + "</div>" + "</td>" + "</tr>", label:"", iconClass:"", disabled:false, postCreate:function () {
			dojo.setSelectable(this.domNode, false);
			this.setDisabled(this.disabled);
			if (this.label) {
				this.setLabel(this.label);
			}
		}, _onHover:function () {
			this.getParent().onItemHover(this);
		}, _onUnhover:function () {
			this.getParent().onItemUnhover(this);
		}, _onClick:function (evt) {
			this.getParent().onItemClick(this, evt);
			dojo.stopEvent(evt);
		}, onClick:function (evt) {
		}, focus:function () {
			dojo.addClass(this.domNode, "dijitMenuItemHover");
			try {
				dijit.focus(this.containerNode);
			}
			catch (e) {
			}
		}, _blur:function () {
			dojo.removeClass(this.domNode, "dijitMenuItemHover");
		}, setLabel:function (value) {
			this.containerNode.innerHTML = this.label = value;
		}, setDisabled:function (value) {
			this.disabled = value;
			dojo[value ? "addClass" : "removeClass"](this.domNode, "dijitMenuItemDisabled");
			dijit.setWaiState(this.containerNode, "disabled", value ? "true" : "false");
		}});
		dojo.declare("dijit.PopupMenuItem", dijit.MenuItem, {_fillContent:function () {
			if (this.srcNodeRef) {
				var nodes = dojo.query("*", this.srcNodeRef);
				dijit.PopupMenuItem.superclass._fillContent.call(this, nodes[0]);
				this.dropDownContainer = this.srcNodeRef;
			}
		}, startup:function () {
			if (this._started) {
				return;
			}
			this.inherited(arguments);
			if (!this.popup) {
				var node = dojo.query("[widgetId]", this.dropDownContainer)[0];
				this.popup = dijit.byNode(node);
			}
			dojo.body().appendChild(this.popup.domNode);
			this.popup.domNode.style.display = "none";
			dojo.addClass(this.expand, "dijitMenuExpandEnabled");
			dojo.style(this.expand, "display", "");
			dijit.setWaiState(this.containerNode, "haspopup", "true");
		}, destroyDescendants:function () {
			if (this.popup) {
				this.popup.destroyRecursive();
				delete this.popup;
			}
			this.inherited(arguments);
		}});
		dojo.declare("dijit.MenuSeparator", [dijit._Widget, dijit._Templated, dijit._Contained], {templateString:"<tr class=\"dijitMenuSeparator\"><td colspan=3>" + "<div class=\"dijitMenuSeparatorTop\"></div>" + "<div class=\"dijitMenuSeparatorBottom\"></div>" + "</td></tr>", postCreate:function () {
			dojo.setSelectable(this.domNode, false);
		}, isFocusable:function () {
			return false;
		}});
	}
	if (!dojo._hasResource["dijit.layout.StackContainer"]) {
		dojo._hasResource["dijit.layout.StackContainer"] = true;
		dojo.provide("dijit.layout.StackContainer");
		dojo.declare("dijit.layout.StackContainer", dijit.layout._LayoutWidget, {doLayout:true, _started:false, postCreate:function () {
			dijit.setWaiRole((this.containerNode || this.domNode), "tabpanel");
			this.connect(this.domNode, "onkeypress", this._onKeyPress);
		}, startup:function () {
			if (this._started) {
				return;
			}
			var children = this.getChildren();
			dojo.forEach(children, this._setupChild, this);
			dojo.some(children, function (child) {
				if (child.selected) {
					this.selectedChildWidget = child;
				}
				return child.selected;
			}, this);
			var selected = this.selectedChildWidget;
			if (!selected && children[0]) {
				selected = this.selectedChildWidget = children[0];
				selected.selected = true;
			}
			if (selected) {
				this._showChild(selected);
			}
			dojo.publish(this.id + "-startup", [{children:children, selected:selected}]);
			this.inherited(arguments);
		}, _setupChild:function (page) {
			page.domNode.style.display = "none";
			page.domNode.style.position = "relative";
			return page;
		}, addChild:function (child, insertIndex) {
			dijit._Container.prototype.addChild.apply(this, arguments);
			child = this._setupChild(child);
			if (this._started) {
				this.layout();
				dojo.publish(this.id + "-addChild", [child, insertIndex]);
				if (!this.selectedChildWidget) {
					this.selectChild(child);
				}
			}
		}, removeChild:function (page) {
			dijit._Container.prototype.removeChild.apply(this, arguments);
			if (this._beingDestroyed) {
				return;
			}
			if (this._started) {
				dojo.publish(this.id + "-removeChild", [page]);
				this.layout();
			}
			if (this.selectedChildWidget === page) {
				this.selectedChildWidget = undefined;
				if (this._started) {
					var children = this.getChildren();
					if (children.length) {
						this.selectChild(children[0]);
					}
				}
			}
		}, selectChild:function (page) {
			page = dijit.byId(page);
			if (this.selectedChildWidget != page) {
				this._transition(page, this.selectedChildWidget);
				this.selectedChildWidget = page;
				dojo.publish(this.id + "-selectChild", [page]);
			}
		}, _transition:function (newWidget, oldWidget) {
			if (oldWidget) {
				this._hideChild(oldWidget);
			}
			this._showChild(newWidget);
			if (this.doLayout && newWidget.resize) {
				newWidget.resize(this._containerContentBox || this._contentBox);
			}
		}, _adjacent:function (forward) {
			var children = this.getChildren();
			var index = dojo.indexOf(children, this.selectedChildWidget);
			index += forward ? 1 : children.length - 1;
			return children[index % children.length];
		}, forward:function () {
			this.selectChild(this._adjacent(true));
		}, back:function () {
			this.selectChild(this._adjacent(false));
		}, _onKeyPress:function (e) {
			dojo.publish(this.id + "-containerKeyPress", [{e:e, page:this}]);
		}, layout:function () {
			if (this.doLayout && this.selectedChildWidget && this.selectedChildWidget.resize) {
				this.selectedChildWidget.resize(this._contentBox);
			}
		}, _showChild:function (page) {
			var children = this.getChildren();
			page.isFirstChild = (page == children[0]);
			page.isLastChild = (page == children[children.length - 1]);
			page.selected = true;
			page.domNode.style.display = "";
			if (page._loadCheck) {
				page._loadCheck();
			}
			if (page.onShow) {
				page.onShow();
			}
		}, _hideChild:function (page) {
			page.selected = false;
			page.domNode.style.display = "none";
			if (page.onHide) {
				page.onHide();
			}
		}, closeChild:function (page) {
			var remove = page.onClose(this, page);
			if (remove) {
				this.removeChild(page);
				page.destroyRecursive();
			}
		}, destroy:function () {
			this._beingDestroyed = true;
			this.inherited(arguments);
		}});
		dojo.declare("dijit.layout.StackController", [dijit._Widget, dijit._Templated, dijit._Container], {templateString:"<span wairole='tablist' dojoAttachEvent='onkeypress' class='dijitStackController'></span>", containerId:"", buttonWidget:"dijit.layout._StackButton", postCreate:function () {
			dijit.setWaiRole(this.domNode, "tablist");
			this.pane2button = {};
			this.pane2menu = {};
			this._subscriptions = [dojo.subscribe(this.containerId + "-startup", this, "onStartup"), dojo.subscribe(this.containerId + "-addChild", this, "onAddChild"), dojo.subscribe(this.containerId + "-removeChild", this, "onRemoveChild"), dojo.subscribe(this.containerId + "-selectChild", this, "onSelectChild"), dojo.subscribe(this.containerId + "-containerKeyPress", this, "onContainerKeyPress")];
		}, onStartup:function (info) {
			dojo.forEach(info.children, this.onAddChild, this);
			this.onSelectChild(info.selected);
		}, destroy:function () {
			for (var pane in this.pane2button) {
				this.onRemoveChild(pane);
			}
			dojo.forEach(this._subscriptions, dojo.unsubscribe);
			this.inherited(arguments);
		}, onAddChild:function (page, insertIndex) {
			var refNode = dojo.doc.createElement("span");
			this.domNode.appendChild(refNode);
			var cls = dojo.getObject(this.buttonWidget);
			var button = new cls({label:page.title, closeButton:page.closable}, refNode);
			this.addChild(button, insertIndex);
			this.pane2button[page] = button;
			page.controlButton = button;
			dojo.connect(button, "onClick", dojo.hitch(this, "onButtonClick", page));
			if (page.closable) {
				dojo.connect(button, "onClickCloseButton", dojo.hitch(this, "onCloseButtonClick", page));
				var _nlsResources = dojo.i18n.getLocalization("dijit", "common");
				var closeMenu = new dijit.Menu({targetNodeIds:[button.id], id:button.id + "_Menu"});
				var mItem = new dijit.MenuItem({label:_nlsResources.itemClose});
				dojo.connect(mItem, "onClick", dojo.hitch(this, "onCloseButtonClick", page));
				closeMenu.addChild(mItem);
				this.pane2menu[page] = closeMenu;
			}
			if (!this._currentChild) {
				button.focusNode.setAttribute("tabIndex", "0");
				this._currentChild = page;
			}
			if (!this.isLeftToRight() && dojo.isIE && this._rectifyRtlTabList) {
				this._rectifyRtlTabList();
			}
		}, onRemoveChild:function (page) {
			if (this._currentChild === page) {
				this._currentChild = null;
			}
			var button = this.pane2button[page];
			var menu = this.pane2menu[page];
			if (menu) {
				menu.destroy();
			}
			if (button) {
				button.destroy();
			}
			this.pane2button[page] = null;
		}, onSelectChild:function (page) {
			if (!page) {
				return;
			}
			if (this._currentChild) {
				var oldButton = this.pane2button[this._currentChild];
				oldButton.setAttribute("checked", false);
				oldButton.focusNode.setAttribute("tabIndex", "-1");
			}
			var newButton = this.pane2button[page];
			newButton.setAttribute("checked", true);
			this._currentChild = page;
			newButton.focusNode.setAttribute("tabIndex", "0");
			var container = dijit.byId(this.containerId);
			dijit.setWaiState(container.containerNode || container.domNode, "labelledby", newButton.id);
		}, onButtonClick:function (page) {
			var container = dijit.byId(this.containerId);
			container.selectChild(page);
		}, onCloseButtonClick:function (page) {
			var container = dijit.byId(this.containerId);
			container.closeChild(page);
			var b = this.pane2button[this._currentChild];
			if (b) {
				dijit.focus(b.focusNode || b.domNode);
			}
		}, adjacent:function (forward) {
			if (!this.isLeftToRight() && (!this.tabPosition || /top|bottom/.test(this.tabPosition))) {
				forward = !forward;
			}
			var children = this.getChildren();
			var current = dojo.indexOf(children, this.pane2button[this._currentChild]);
			var offset = forward ? 1 : children.length - 1;
			return children[(current + offset) % children.length];
		}, onkeypress:function (e) {
			if (this.disabled || e.altKey) {
				return;
			}
			var forward = null;
			if (e.ctrlKey || !e._djpage) {
				var k = dojo.keys;
				switch (e.keyCode) {
				  case k.LEFT_ARROW:
				  case k.UP_ARROW:
					if (!e._djpage) {
						forward = false;
					}
					break;
				  case k.PAGE_UP:
					if (e.ctrlKey) {
						forward = false;
					}
					break;
				  case k.RIGHT_ARROW:
				  case k.DOWN_ARROW:
					if (!e._djpage) {
						forward = true;
					}
					break;
				  case k.PAGE_DOWN:
					if (e.ctrlKey) {
						forward = true;
					}
					break;
				  case k.DELETE:
					if (this._currentChild.closable) {
						this.onCloseButtonClick(this._currentChild);
					}
					dojo.stopEvent(e);
					break;
				  default:
					if (e.ctrlKey) {
						if (e.keyCode == k.TAB) {
							this.adjacent(!e.shiftKey).onClick();
							dojo.stopEvent(e);
						} else {
							if (e.keyChar == "w") {
								if (this._currentChild.closable) {
									this.onCloseButtonClick(this._currentChild);
								}
								dojo.stopEvent(e);
							}
						}
					}
				}
				if (forward !== null) {
					this.adjacent(forward).onClick();
					dojo.stopEvent(e);
				}
			}
		}, onContainerKeyPress:function (info) {
			info.e._djpage = info.page;
			this.onkeypress(info.e);
		}});
		dojo.declare("dijit.layout._StackButton", dijit.form.ToggleButton, {tabIndex:"-1", postCreate:function (evt) {
			dijit.setWaiRole((this.focusNode || this.domNode), "tab");
			this.inherited(arguments);
		}, onClick:function (evt) {
			dijit.focus(this.focusNode);
		}, onClickCloseButton:function (evt) {
			evt.stopPropagation();
		}});
		dojo.extend(dijit._Widget, {title:"", selected:false, closable:false, onClose:function () {
			return true;
		}});
	}
	if (!dojo._hasResource["dijit.layout.TabContainer"]) {
		dojo._hasResource["dijit.layout.TabContainer"] = true;
		dojo.provide("dijit.layout.TabContainer");
		dojo.declare("dijit.layout.TabContainer", [dijit.layout.StackContainer, dijit._Templated], {tabPosition:"top", templateString:null, templateString:"<div class=\"dijitTabContainer\">\n\t<div dojoAttachPoint=\"tablistNode\"></div>\n\t<div class=\"dijitTabPaneWrapper\" dojoAttachPoint=\"containerNode\"></div>\n</div>\n", _controllerWidget:"dijit.layout.TabController", postCreate:function () {
			this.inherited(arguments);
			var TabController = dojo.getObject(this._controllerWidget);
			this.tablist = new TabController({id:this.id + "_tablist", tabPosition:this.tabPosition, doLayout:this.doLayout, containerId:this.id}, this.tablistNode);
		}, _setupChild:function (tab) {
			dojo.addClass(tab.domNode, "dijitTabPane");
			this.inherited(arguments);
			return tab;
		}, startup:function () {
			if (this._started) {
				return;
			}
			this.tablist.startup();
			this.inherited(arguments);
			if (dojo.isSafari) {
				setTimeout(dojo.hitch(this, "layout"), 0);
			}
			if (dojo.isIE && !this.isLeftToRight() && this.tabPosition == "right-h" && this.tablist && this.tablist.pane2button) {
				for (var pane in this.tablist.pane2button) {
					var tabButton = this.tablist.pane2button[pane];
					if (!tabButton.closeButton) {
						continue;
					}
					tabButtonStyle = tabButton.closeButtonNode.style;
					tabButtonStyle.position = "absolute";
					if (dojo.isIE < 7) {
						tabButtonStyle.left = tabButton.domNode.offsetWidth + "px";
					} else {
						tabButtonStyle.padding = "0px";
					}
				}
			}
		}, layout:function () {
			if (!this.doLayout) {
				return;
			}
			var titleAlign = this.tabPosition.replace(/-h/, "");
			var children = [{domNode:this.tablist.domNode, layoutAlign:titleAlign}, {domNode:this.containerNode, layoutAlign:"client"}];
			dijit.layout.layoutChildren(this.domNode, this._contentBox, children);
			this._containerContentBox = dijit.layout.marginBox2contentBox(this.containerNode, children[1]);
			if (this.selectedChildWidget) {
				this._showChild(this.selectedChildWidget);
				if (this.doLayout && this.selectedChildWidget.resize) {
					this.selectedChildWidget.resize(this._containerContentBox);
				}
			}
		}, destroy:function () {
			if (this.tablist) {
				this.tablist.destroy();
			}
			this.inherited(arguments);
		}});
		dojo.declare("dijit.layout.TabController", dijit.layout.StackController, {templateString:"<div wairole='tablist' dojoAttachEvent='onkeypress:onkeypress'></div>", tabPosition:"top", doLayout:true, buttonWidget:"dijit.layout._TabButton", postMixInProperties:function () {
			this["class"] = "dijitTabLabels-" + this.tabPosition + (this.doLayout ? "" : " dijitTabNoLayout");
			this.inherited(arguments);
		}, _rectifyRtlTabList:function () {
			if (0 >= this.tabPosition.indexOf("-h")) {
				return;
			}
			if (!this.pane2button) {
				return;
			}
			var maxLen = 0;
			for (var pane in this.pane2button) {
				maxLen = Math.max(maxLen, dojo.marginBox(this.pane2button[pane].innerDiv).w);
			}
			for (pane in this.pane2button) {
				this.pane2button[pane].innerDiv.style.width = maxLen + "px";
			}
		}});
		dojo.declare("dijit.layout._TabButton", dijit.layout._StackButton, {baseClass:"dijitTab", templateString:"<div waiRole=\"presentation\" dojoAttachEvent='onclick:onClick,onmouseenter:_onMouse,onmouseleave:_onMouse'>\n	<div waiRole=\"presentation\" class='dijitTabInnerDiv' dojoAttachPoint='innerDiv'>\n		<div waiRole=\"presentation\" class='dijitTabContent' dojoAttachPoint='tabContent'>\n\t		<span dojoAttachPoint='containerNode,focusNode' class='tabLabel'>${!label}</span>\n\t		<span dojoAttachPoint='closeButtonNode' class='closeImage' dojoAttachEvent='onmouseenter:_onMouse, onmouseleave:_onMouse, onclick:onClickCloseButton' stateModifier='CloseButton'>\n\t			<span dojoAttachPoint='closeText' class='closeText'>x</span>\n\t		</span>\n		</div>\n	</div>\n</div>\n", postCreate:function () {
			if (this.closeButton) {
				dojo.addClass(this.innerDiv, "dijitClosable");
			} else {
				this.closeButtonNode.style.display = "none";
			}
			this.inherited(arguments);
			dojo.setSelectable(this.containerNode, false);
		}});
	}
	if (!dojo._hasResource["dijit.layout.SplitContainer"]) {
		dojo._hasResource["dijit.layout.SplitContainer"] = true;
		dojo.provide("dijit.layout.SplitContainer");
		dojo.declare("dijit.layout.SplitContainer", dijit.layout._LayoutWidget, {constructor:function () {
			dojo.deprecated("dijit.layout.SplitContainer is deprecated", "use BorderContainer with splitter instead", 2);
		}, activeSizing:false, sizerWidth:7, orientation:"horizontal", persist:true, postMixInProperties:function () {
			this.inherited("postMixInProperties", arguments);
			this.isHorizontal = (this.orientation == "horizontal");
		}, postCreate:function () {
			this.inherited("postCreate", arguments);
			this.sizers = [];
			dojo.addClass(this.domNode, "dijitSplitContainer");
			if (dojo.isMozilla) {
				this.domNode.style.overflow = "-moz-scrollbars-none";
			}
			if (typeof this.sizerWidth == "object") {
				try {
					this.sizerWidth = parseInt(this.sizerWidth.toString());
				}
				catch (e) {
					this.sizerWidth = 7;
				}
			}
			var sizer = this.virtualSizer = dojo.doc.createElement("div");
			sizer.style.position = "relative";
			sizer.style.zIndex = 10;
			sizer.className = this.isHorizontal ? "dijitSplitContainerVirtualSizerH" : "dijitSplitContainerVirtualSizerV";
			this.domNode.appendChild(sizer);
			dojo.setSelectable(sizer, false);
		}, destroy:function () {
			delete this.virtualSizer;
			dojo.forEach(this._ownconnects, dojo.disconnect);
			this.inherited(arguments);
		}, startup:function () {
			if (this._started) {
				return;
			}
			dojo.forEach(this.getChildren(), function (child, i, children) {
				this._injectChild(child);
				if (i < children.length - 1) {
					this._addSizer();
				}
			}, this);
			if (this.persist) {
				this._restoreState();
			}
			this.inherited(arguments);
		}, _injectChild:function (child) {
			child.domNode.style.position = "absolute";
			dojo.addClass(child.domNode, "dijitSplitPane");
		}, _addSizer:function () {
			var i = this.sizers.length;
			var sizer = this.sizers[i] = dojo.doc.createElement("div");
			this.domNode.appendChild(sizer);
			sizer.className = this.isHorizontal ? "dijitSplitContainerSizerH" : "dijitSplitContainerSizerV";
			var thumb = dojo.doc.createElement("div");
			thumb.className = "thumb";
			sizer.appendChild(thumb);
			var self = this;
			var handler = (function () {
				var sizer_i = i;
				return function (e) {
					self.beginSizing(e, sizer_i);
				};
			})();
			this.connect(sizer, "onmousedown", handler);
			dojo.setSelectable(sizer, false);
		}, removeChild:function (widget) {
			if (this.sizers.length) {
				var i = dojo.indexOf(this.getChildren(), widget);
				if (i != -1) {
					if (i == this.sizers.length) {
						i--;
					}
					dojo._destroyElement(this.sizers[i]);
					this.sizers.splice(i, 1);
				}
			}
			this.inherited(arguments);
			if (this._started) {
				this.layout();
			}
		}, addChild:function (child, insertIndex) {
			this.inherited("addChild", arguments);
			if (this._started) {
				this._injectChild(child);
				var children = this.getChildren();
				if (children.length > 1) {
					this._addSizer();
				}
				this.layout();
			}
		}, layout:function () {
			this.paneWidth = this._contentBox.w;
			this.paneHeight = this._contentBox.h;
			var children = this.getChildren();
			if (!children.length) {
				return;
			}
			var space = this.isHorizontal ? this.paneWidth : this.paneHeight;
			if (children.length > 1) {
				space -= this.sizerWidth * (children.length - 1);
			}
			var outOf = 0;
			dojo.forEach(children, function (child) {
				outOf += child.sizeShare;
			});
			var pixPerUnit = space / outOf;
			var totalSize = 0;
			dojo.forEach(children.slice(0, children.length - 1), function (child) {
				var size = Math.round(pixPerUnit * child.sizeShare);
				child.sizeActual = size;
				totalSize += size;
			});
			children[children.length - 1].sizeActual = space - totalSize;
			this._checkSizes();
			var pos = 0;
			var size = children[0].sizeActual;
			this._movePanel(children[0], pos, size);
			children[0].position = pos;
			pos += size;
			if (!this.sizers) {
				return;
			}
			dojo.some(children.slice(1), function (child, i) {
				if (!this.sizers[i]) {
					return true;
				}
				this._moveSlider(this.sizers[i], pos, this.sizerWidth);
				this.sizers[i].position = pos;
				pos += this.sizerWidth;
				size = child.sizeActual;
				this._movePanel(child, pos, size);
				child.position = pos;
				pos += size;
			}, this);
		}, _movePanel:function (panel, pos, size) {
			if (this.isHorizontal) {
				panel.domNode.style.left = pos + "px";
				panel.domNode.style.top = 0;
				var box = {w:size, h:this.paneHeight};
				if (panel.resize) {
					panel.resize(box);
				} else {
					dojo.marginBox(panel.domNode, box);
				}
			} else {
				panel.domNode.style.left = 0;
				panel.domNode.style.top = pos + "px";
				var box = {w:this.paneWidth, h:size};
				if (panel.resize) {
					panel.resize(box);
				} else {
					dojo.marginBox(panel.domNode, box);
				}
			}
		}, _moveSlider:function (slider, pos, size) {
			if (this.isHorizontal) {
				slider.style.left = pos + "px";
				slider.style.top = 0;
				dojo.marginBox(slider, {w:size, h:this.paneHeight});
			} else {
				slider.style.left = 0;
				slider.style.top = pos + "px";
				dojo.marginBox(slider, {w:this.paneWidth, h:size});
			}
		}, _growPane:function (growth, pane) {
			if (growth > 0) {
				if (pane.sizeActual > pane.sizeMin) {
					if ((pane.sizeActual - pane.sizeMin) > growth) {
						pane.sizeActual = pane.sizeActual - growth;
						growth = 0;
					} else {
						growth -= pane.sizeActual - pane.sizeMin;
						pane.sizeActual = pane.sizeMin;
					}
				}
			}
			return growth;
		}, _checkSizes:function () {
			var totalMinSize = 0;
			var totalSize = 0;
			var children = this.getChildren();
			dojo.forEach(children, function (child) {
				totalSize += child.sizeActual;
				totalMinSize += child.sizeMin;
			});
			if (totalMinSize <= totalSize) {
				var growth = 0;
				dojo.forEach(children, function (child) {
					if (child.sizeActual < child.sizeMin) {
						growth += child.sizeMin - child.sizeActual;
						child.sizeActual = child.sizeMin;
					}
				});
				if (growth > 0) {
					var list = this.isDraggingLeft ? children.reverse() : children;
					dojo.forEach(list, function (child) {
						growth = this._growPane(growth, child);
					}, this);
				}
			} else {
				dojo.forEach(children, function (child) {
					child.sizeActual = Math.round(totalSize * (child.sizeMin / totalMinSize));
				});
			}
		}, beginSizing:function (e, i) {
			var children = this.getChildren();
			this.paneBefore = children[i];
			this.paneAfter = children[i + 1];
			this.isSizing = true;
			this.sizingSplitter = this.sizers[i];
			if (!this.cover) {
				this.cover = dojo.doc.createElement("div");
				this.domNode.appendChild(this.cover);
				var s = this.cover.style;
				s.position = "absolute";
				s.zIndex = 1;
				s.top = 0;
				s.left = 0;
				s.width = "100%";
				s.height = "100%";
			} else {
				this.cover.style.zIndex = 1;
			}
			this.sizingSplitter.style.zIndex = 2;
			this.originPos = dojo.coords(children[0].domNode, true);
			if (this.isHorizontal) {
				var client = (e.layerX ? e.layerX : e.offsetX);
				var screen = e.pageX;
				this.originPos = this.originPos.x;
			} else {
				var client = (e.layerY ? e.layerY : e.offsetY);
				var screen = e.pageY;
				this.originPos = this.originPos.y;
			}
			this.startPoint = this.lastPoint = screen;
			this.screenToClientOffset = screen - client;
			this.dragOffset = this.lastPoint - this.paneBefore.sizeActual - this.originPos - this.paneBefore.position;
			if (!this.activeSizing) {
				this._showSizingLine();
			}
			this._ownconnects = [];
			this._ownconnects.push(dojo.connect(dojo.doc.documentElement, "onmousemove", this, "changeSizing"));
			this._ownconnects.push(dojo.connect(dojo.doc.documentElement, "onmouseup", this, "endSizing"));
			dojo.stopEvent(e);
		}, changeSizing:function (e) {
			if (!this.isSizing) {
				return;
			}
			this.lastPoint = this.isHorizontal ? e.pageX : e.pageY;
			this.movePoint();
			if (this.activeSizing) {
				this._updateSize();
			} else {
				this._moveSizingLine();
			}
			dojo.stopEvent(e);
		}, endSizing:function (e) {
			if (!this.isSizing) {
				return;
			}
			if (this.cover) {
				this.cover.style.zIndex = -1;
			}
			if (!this.activeSizing) {
				this._hideSizingLine();
			}
			this._updateSize();
			this.isSizing = false;
			if (this.persist) {
				this._saveState(this);
			}
			dojo.forEach(this._ownconnects, dojo.disconnect);
		}, movePoint:function () {
			var p = this.lastPoint - this.screenToClientOffset;
			var a = p - this.dragOffset;
			a = this.legaliseSplitPoint(a);
			p = a + this.dragOffset;
			this.lastPoint = p + this.screenToClientOffset;
		}, legaliseSplitPoint:function (a) {
			a += this.sizingSplitter.position;
			this.isDraggingLeft = !!(a > 0);
			if (!this.activeSizing) {
				var min = this.paneBefore.position + this.paneBefore.sizeMin;
				if (a < min) {
					a = min;
				}
				var max = this.paneAfter.position + (this.paneAfter.sizeActual - (this.sizerWidth + this.paneAfter.sizeMin));
				if (a > max) {
					a = max;
				}
			}
			a -= this.sizingSplitter.position;
			this._checkSizes();
			return a;
		}, _updateSize:function () {
			var pos = this.lastPoint - this.dragOffset - this.originPos;
			var start_region = this.paneBefore.position;
			var end_region = this.paneAfter.position + this.paneAfter.sizeActual;
			this.paneBefore.sizeActual = pos - start_region;
			this.paneAfter.position = pos + this.sizerWidth;
			this.paneAfter.sizeActual = end_region - this.paneAfter.position;
			dojo.forEach(this.getChildren(), function (child) {
				child.sizeShare = child.sizeActual;
			});
			if (this._started) {
				this.layout();
			}
		}, _showSizingLine:function () {
			this._moveSizingLine();
			dojo.marginBox(this.virtualSizer, this.isHorizontal ? {w:this.sizerWidth, h:this.paneHeight} : {w:this.paneWidth, h:this.sizerWidth});
			this.virtualSizer.style.display = "block";
		}, _hideSizingLine:function () {
			this.virtualSizer.style.display = "none";
		}, _moveSizingLine:function () {
			var pos = (this.lastPoint - this.startPoint) + this.sizingSplitter.position;
			dojo.style(this.virtualSizer, (this.isHorizontal ? "left" : "top"), pos + "px");
		}, _getCookieName:function (i) {
			return this.id + "_" + i;
		}, _restoreState:function () {
			dojo.forEach(this.getChildren(), function (child, i) {
				var cookieName = this._getCookieName(i);
				var cookieValue = dojo.cookie(cookieName);
				if (cookieValue) {
					var pos = parseInt(cookieValue);
					if (typeof pos == "number") {
						child.sizeShare = pos;
					}
				}
			}, this);
		}, _saveState:function () {
			dojo.forEach(this.getChildren(), function (child, i) {
				dojo.cookie(this._getCookieName(i), child.sizeShare);
			}, this);
		}});
		dojo.extend(dijit._Widget, {sizeMin:10, sizeShare:10});
	}
	if (!dojo._hasResource["dijit.layout.AccordionContainer"]) {
		dojo._hasResource["dijit.layout.AccordionContainer"] = true;
		dojo.provide("dijit.layout.AccordionContainer");
		dojo.declare("dijit.layout.AccordionContainer", dijit.layout.StackContainer, {duration:250, _verticalSpace:0, postCreate:function () {
			this.domNode.style.overflow = "hidden";
			this.inherited("postCreate", arguments);
			dijit.setWaiRole(this.domNode, "tablist");
			dojo.addClass(this.domNode, "dijitAccordionContainer");
		}, startup:function () {
			if (this._started) {
				return;
			}
			this.inherited("startup", arguments);
			if (this.selectedChildWidget) {
				var style = this.selectedChildWidget.containerNode.style;
				style.display = "";
				style.overflow = "auto";
				this.selectedChildWidget._setSelectedState(true);
			}
		}, layout:function () {
			var totalCollapsedHeight = 0;
			var openPane = this.selectedChildWidget;
			dojo.forEach(this.getChildren(), function (child) {
				totalCollapsedHeight += child.getTitleHeight();
			});
			var mySize = this._contentBox;
			this._verticalSpace = (mySize.h - totalCollapsedHeight);
			if (openPane) {
				openPane.containerNode.style.height = this._verticalSpace + "px";
			}
		}, _setupChild:function (page) {
			return page;
		}, _transition:function (newWidget, oldWidget) {
			if (this._inTransition) {
				return;
			}
			this._inTransition = true;
			var animations = [];
			var paneHeight = this._verticalSpace;
			if (newWidget) {
				newWidget.setSelected(true);
				var newContents = newWidget.containerNode;
				newContents.style.display = "";
				animations.push(dojo.animateProperty({node:newContents, duration:this.duration, properties:{height:{start:"1", end:paneHeight}}, onEnd:function () {
					newContents.style.overflow = "auto";
				}}));
			}
			if (oldWidget) {
				oldWidget.setSelected(false);
				var oldContents = oldWidget.containerNode;
				oldContents.style.overflow = "hidden";
				animations.push(dojo.animateProperty({node:oldContents, duration:this.duration, properties:{height:{start:paneHeight, end:"1"}}, onEnd:function () {
					oldContents.style.display = "none";
				}}));
			}
			this._inTransition = false;
			dojo.fx.combine(animations).play();
		}, _onKeyPress:function (e) {
			if (this.disabled || e.altKey || !(e._dijitWidget || e.ctrlKey)) {
				return;
			}
			var k = dojo.keys;
			var fromTitle = e._dijitWidget;
			switch (e.keyCode) {
			  case k.LEFT_ARROW:
			  case k.UP_ARROW:
				if (fromTitle) {
					this._adjacent(false)._onTitleClick();
					dojo.stopEvent(e);
				}
				break;
			  case k.PAGE_UP:
				if (e.ctrlKey) {
					this._adjacent(false)._onTitleClick();
					dojo.stopEvent(e);
				}
				break;
			  case k.RIGHT_ARROW:
			  case k.DOWN_ARROW:
				if (fromTitle) {
					this._adjacent(true)._onTitleClick();
					dojo.stopEvent(e);
				}
				break;
			  case k.PAGE_DOWN:
				if (e.ctrlKey) {
					this._adjacent(true)._onTitleClick();
					dojo.stopEvent(e);
				}
				break;
			  default:
				if (e.ctrlKey && e.keyCode == k.TAB) {
					this._adjacent(e._dijitWidget, !e.shiftKey)._onTitleClick();
					dojo.stopEvent(e);
				}
			}
		}});
		dojo.declare("dijit.layout.AccordionPane", [dijit.layout.ContentPane, dijit._Templated, dijit._Contained], {templateString:"<div class='dijitAccordionPane'\n\t><div dojoAttachPoint='titleNode,focusNode' dojoAttachEvent='ondijitclick:_onTitleClick,onkeypress:_onTitleKeyPress,onfocus:_handleFocus,onblur:_handleFocus'\n\t\tclass='dijitAccordionTitle' wairole=\"tab\"\n\t\t><div class='dijitAccordionArrow' waiRole=\"presentation\"></div\n\t\t><div class='arrowTextUp' waiRole=\"presentation\">&#9650;</div\n\t\t><div class='arrowTextDown' waiRole=\"presentation\">&#9660;</div\n\t\t><div waiRole=\"presentation\" dojoAttachPoint='titleTextNode' class='dijitAccordionText'>${title}</div></div\n\t><div><div dojoAttachPoint='containerNode' style='overflow: hidden; height: 1px; display: none'\n\t\tclass='dijitAccordionBody' wairole=\"tabpanel\"\n\t></div></div>\n</div>\n", postCreate:function () {
			this.inherited("postCreate", arguments);
			dojo.setSelectable(this.titleNode, false);
			this.setSelected(this.selected);
		}, getTitleHeight:function () {
			return dojo.marginBox(this.titleNode).h;
		}, _onTitleClick:function () {
			var parent = this.getParent();
			if (!parent._inTransition) {
				parent.selectChild(this);
				dijit.focus(this.focusNode);
			}
		}, _onTitleKeyPress:function (evt) {
			evt._dijitWidget = this;
			return this.getParent()._onKeyPress(evt);
		}, _setSelectedState:function (isSelected) {
			this.selected = isSelected;
			dojo[(isSelected ? "addClass" : "removeClass")](this.titleNode, "dijitAccordionTitle-selected");
			this.focusNode.setAttribute("tabIndex", isSelected ? "0" : "-1");
		}, _handleFocus:function (e) {
			dojo[(e.type == "focus" ? "addClass" : "removeClass")](this.focusNode, "dijitAccordionFocused");
		}, setSelected:function (isSelected) {
			this._setSelectedState(isSelected);
			if (isSelected) {
				this.onSelected();
				this._loadCheck(true);
			}
		}, onSelected:function () {
		}});
	}
	if (!dojo._hasResource["dojox.grid._grid.lib"]) {
		dojo._hasResource["dojox.grid._grid.lib"] = true;
		dojo.provide("dojox.grid._grid.lib");
		dojo.mixin(dojox.grid, {na:"...", nop:function () {
		}, getTdIndex:function (td) {
			return td.cellIndex >= 0 ? td.cellIndex : dojo.indexOf(td.parentNode.cells, td);
		}, getTrIndex:function (tr) {
			return tr.rowIndex >= 0 ? tr.rowIndex : dojo.indexOf(tr.parentNode.childNodes, tr);
		}, getTr:function (rowOwner, index) {
			return rowOwner && ((rowOwner.rows || 0)[index] || rowOwner.childNodes[index]);
		}, getTd:function (rowOwner, rowIndex, cellIndex) {
			return (dojox.grid.getTr(inTable, rowIndex) || 0)[cellIndex];
		}, findTable:function (node) {
			for (var n = node; n && n.tagName != "TABLE"; n = n.parentNode) {
			}
			return n;
		}, ascendDom:function (inNode, inWhile) {
			for (var n = inNode; n && inWhile(n); n = n.parentNode) {
			}
			return n;
		}, makeNotTagName:function (inTagName) {
			var name = inTagName.toUpperCase();
			return function (node) {
				return node.tagName != name;
			};
		}, fire:function (ob, ev, args) {
			var fn = ob && ev && ob[ev];
			return fn && (args ? fn.apply(ob, args) : ob[ev]());
		}, setStyleText:function (inNode, inStyleText) {
			if (inNode.style.cssText == undefined) {
				inNode.setAttribute("style", inStyleText);
			} else {
				inNode.style.cssText = inStyleText;
			}
		}, getStyleText:function (inNode, inStyleText) {
			return (inNode.style.cssText == undefined ? inNode.getAttribute("style") : inNode.style.cssText);
		}, setStyle:function (inElement, inStyle, inValue) {
			if (inElement && inElement.style[inStyle] != inValue) {
				inElement.style[inStyle] = inValue;
			}
		}, setStyleHeightPx:function (inElement, inHeight) {
			if (inHeight >= 0) {
				dojox.grid.setStyle(inElement, "height", inHeight + "px");
			}
		}, mouseEvents:["mouseover", "mouseout", "mousedown", "mouseup", "click", "dblclick", "contextmenu"], keyEvents:["keyup", "keydown", "keypress"], funnelEvents:function (inNode, inObject, inMethod, inEvents) {
			var evts = (inEvents ? inEvents : dojox.grid.mouseEvents.concat(dojox.grid.keyEvents));
			for (var i = 0, l = evts.length; i < l; i++) {
				dojo.connect(inNode, "on" + evts[i], inObject, inMethod);
			}
		}, removeNode:function (inNode) {
			inNode = dojo.byId(inNode);
			inNode && inNode.parentNode && inNode.parentNode.removeChild(inNode);
			return inNode;
		}, getScrollbarWidth:function () {
			if (this._scrollBarWidth) {
				return this._scrollBarWidth;
			}
			this._scrollBarWidth = 18;
			try {
				var e = document.createElement("div");
				e.style.cssText = "top:0;left:0;width:100px;height:100px;overflow:scroll;position:absolute;visibility:hidden;";
				document.body.appendChild(e);
				this._scrollBarWidth = e.offsetWidth - e.clientWidth;
				document.body.removeChild(e);
				delete e;
			}
			catch (ex) {
			}
			return this._scrollBarWidth;
		}, getRef:function (name, create, context) {
			var obj = context || dojo.global, parts = name.split("."), prop = parts.pop();
			for (var i = 0, p; obj && (p = parts[i]); i++) {
				obj = (p in obj ? obj[p] : (create ? obj[p] = {} : undefined));
			}
			return {obj:obj, prop:prop};
		}, getProp:function (name, create, context) {
			with (dojox.grid.getRef(name, create, context)) {
				return (obj) && (prop) && (prop in obj ? obj[prop] : (create ? obj[prop] = {} : undefined));
			}
		}, indexInParent:function (inNode) {
			var i = 0, n, p = inNode.parentNode;
			while ((n = p.childNodes[i++])) {
				if (n == inNode) {
					return i - 1;
				}
			}
			return -1;
		}, cleanNode:function (inNode) {
			if (!inNode) {
				return;
			}
			var filter = function (inW) {
				return inW.domNode && dojo.isDescendant(inW.domNode, inNode, true);
			};
			var ws = dijit.registry.filter(filter);
			for (var i = 0, w; (w = ws[i]); i++) {
				w.destroy();
			}
			delete ws;
		}, getTagName:function (inNodeOrId) {
			var node = dojo.byId(inNodeOrId);
			return (node && node.tagName ? node.tagName.toLowerCase() : "");
		}, nodeKids:function (inNode, inTag) {
			var result = [];
			var i = 0, n;
			while ((n = inNode.childNodes[i++])) {
				if (dojox.grid.getTagName(n) == inTag) {
					result.push(n);
				}
			}
			return result;
		}, divkids:function (inNode) {
			return dojox.grid.nodeKids(inNode, "div");
		}, focusSelectNode:function (inNode) {
			try {
				dojox.grid.fire(inNode, "focus");
				dojox.grid.fire(inNode, "select");
			}
			catch (e) {
			}
		}, whenIdle:function () {
			setTimeout(dojo.hitch.apply(dojo, arguments), 0);
		}, arrayCompare:function (inA, inB) {
			for (var i = 0, l = inA.length; i < l; i++) {
				if (inA[i] != inB[i]) {
					return false;
				}
			}
			return (inA.length == inB.length);
		}, arrayInsert:function (inArray, inIndex, inValue) {
			if (inArray.length <= inIndex) {
				inArray[inIndex] = inValue;
			} else {
				inArray.splice(inIndex, 0, inValue);
			}
		}, arrayRemove:function (inArray, inIndex) {
			inArray.splice(inIndex, 1);
		}, arraySwap:function (inArray, inI, inJ) {
			var cache = inArray[inI];
			inArray[inI] = inArray[inJ];
			inArray[inJ] = cache;
		}, initTextSizePoll:function (inInterval) {
			var f = document.createElement("div");
			with (f.style) {
				top = "0px";
				left = "0px";
				position = "absolute";
				visibility = "hidden";
			}
			f.innerHTML = "TheQuickBrownFoxJumpedOverTheLazyDog";
			document.body.appendChild(f);
			var fw = f.offsetWidth;
			var job = function () {
				if (f.offsetWidth != fw) {
					fw = f.offsetWidth;
					dojox.grid.textSizeChanged();
				}
			};
			window.setInterval(job, inInterval || 200);
			dojox.grid.initTextSizePoll = dojox.grid.nop;
		}, textSizeChanged:function () {
		}});
		dojox.grid.jobs = {cancel:function (inHandle) {
			if (inHandle) {
				window.clearTimeout(inHandle);
			}
		}, jobs:[], job:function (inName, inDelay, inJob) {
			dojox.grid.jobs.cancelJob(inName);
			var job = function () {
				delete dojox.grid.jobs.jobs[inName];
				inJob();
			};
			dojox.grid.jobs.jobs[inName] = setTimeout(job, inDelay);
		}, cancelJob:function (inName) {
			dojox.grid.jobs.cancel(dojox.grid.jobs.jobs[inName]);
		}};
	}
	if (!dojo._hasResource["dojox.grid._grid.scroller"]) {
		dojo._hasResource["dojox.grid._grid.scroller"] = true;
		dojo.provide("dojox.grid._grid.scroller");
		dojo.declare("dojox.grid.scroller.base", null, {constructor:function () {
			this.pageHeights = [];
			this.stack = [];
		}, rowCount:0, defaultRowHeight:10, keepRows:100, contentNode:null, scrollboxNode:null, defaultPageHeight:0, keepPages:10, pageCount:0, windowHeight:0, firstVisibleRow:0, lastVisibleRow:0, page:0, pageTop:0, init:function (inRowCount, inKeepRows, inRowsPerPage) {
			switch (arguments.length) {
			  case 3:
				this.rowsPerPage = inRowsPerPage;
			  case 2:
				this.keepRows = inKeepRows;
			  case 1:
				this.rowCount = inRowCount;
			}
			this.defaultPageHeight = this.defaultRowHeight * this.rowsPerPage;
			this.pageCount = Math.ceil(this.rowCount / this.rowsPerPage);
			this.setKeepInfo(this.keepRows);
			this.invalidate();
			if (this.scrollboxNode) {
				this.scrollboxNode.scrollTop = 0;
				this.scroll(0);
				this.scrollboxNode.onscroll = dojo.hitch(this, "onscroll");
			}
		}, setKeepInfo:function (inKeepRows) {
			this.keepRows = inKeepRows;
			this.keepPages = !this.keepRows ? this.keepRows : Math.max(Math.ceil(this.keepRows / this.rowsPerPage), 2);
		}, invalidate:function () {
			this.invalidateNodes();
			this.pageHeights = [];
			this.height = (this.pageCount ? (this.pageCount - 1) * this.defaultPageHeight + this.calcLastPageHeight() : 0);
			this.resize();
		}, updateRowCount:function (inRowCount) {
			this.invalidateNodes();
			this.rowCount = inRowCount;
			oldPageCount = this.pageCount;
			this.pageCount = Math.ceil(this.rowCount / this.rowsPerPage);
			if (this.pageCount < oldPageCount) {
				for (var i = oldPageCount - 1; i >= this.pageCount; i--) {
					this.height -= this.getPageHeight(i);
					delete this.pageHeights[i];
				}
			} else {
				if (this.pageCount > oldPageCount) {
					this.height += this.defaultPageHeight * (this.pageCount - oldPageCount - 1) + this.calcLastPageHeight();
				}
			}
			this.resize();
		}, pageExists:function (inPageIndex) {
		}, measurePage:function (inPageIndex) {
		}, positionPage:function (inPageIndex, inPos) {
		}, repositionPages:function (inPageIndex) {
		}, installPage:function (inPageIndex) {
		}, preparePage:function (inPageIndex, inPos, inReuseNode) {
		}, renderPage:function (inPageIndex) {
		}, removePage:function (inPageIndex) {
		}, pacify:function (inShouldPacify) {
		}, pacifying:false, pacifyTicks:200, setPacifying:function (inPacifying) {
			if (this.pacifying != inPacifying) {
				this.pacifying = inPacifying;
				this.pacify(this.pacifying);
			}
		}, startPacify:function () {
			this.startPacifyTicks = new Date().getTime();
		}, doPacify:function () {
			var result = (new Date().getTime() - this.startPacifyTicks) > this.pacifyTicks;
			this.setPacifying(true);
			this.startPacify();
			return result;
		}, endPacify:function () {
			this.setPacifying(false);
		}, resize:function () {
			if (this.scrollboxNode) {
				this.windowHeight = this.scrollboxNode.clientHeight;
			}
			dojox.grid.setStyleHeightPx(this.contentNode, this.height);
		}, calcLastPageHeight:function () {
			if (!this.pageCount) {
				return 0;
			}
			var lastPage = this.pageCount - 1;
			var lastPageHeight = ((this.rowCount % this.rowsPerPage) || (this.rowsPerPage)) * this.defaultRowHeight;
			this.pageHeights[lastPage] = lastPageHeight;
			return lastPageHeight;
		}, updateContentHeight:function (inDh) {
			this.height += inDh;
			this.resize();
		}, updatePageHeight:function (inPageIndex) {
			if (this.pageExists(inPageIndex)) {
				var oh = this.getPageHeight(inPageIndex);
				var h = (this.measurePage(inPageIndex)) || (oh);
				this.pageHeights[inPageIndex] = h;
				if ((h) && (oh != h)) {
					this.updateContentHeight(h - oh);
					this.repositionPages(inPageIndex);
				}
			}
		}, rowHeightChanged:function (inRowIndex) {
			this.updatePageHeight(Math.floor(inRowIndex / this.rowsPerPage));
		}, invalidateNodes:function () {
			while (this.stack.length) {
				this.destroyPage(this.popPage());
			}
		}, createPageNode:function () {
			var p = document.createElement("div");
			p.style.position = "absolute";
			p.style[dojo._isBodyLtr() ? "left" : "right"] = "0";
			return p;
		}, getPageHeight:function (inPageIndex) {
			var ph = this.pageHeights[inPageIndex];
			return (ph !== undefined ? ph : this.defaultPageHeight);
		}, pushPage:function (inPageIndex) {
			return this.stack.push(inPageIndex);
		}, popPage:function () {
			return this.stack.shift();
		}, findPage:function (inTop) {
			var i = 0, h = 0;
			for (var ph = 0; i < this.pageCount; i++, h += ph) {
				ph = this.getPageHeight(i);
				if (h + ph >= inTop) {
					break;
				}
			}
			this.page = i;
			this.pageTop = h;
		}, buildPage:function (inPageIndex, inReuseNode, inPos) {
			this.preparePage(inPageIndex, inReuseNode);
			this.positionPage(inPageIndex, inPos);
			this.installPage(inPageIndex);
			this.renderPage(inPageIndex);
			this.pushPage(inPageIndex);
		}, needPage:function (inPageIndex, inPos) {
			var h = this.getPageHeight(inPageIndex), oh = h;
			if (!this.pageExists(inPageIndex)) {
				this.buildPage(inPageIndex, this.keepPages && (this.stack.length >= this.keepPages), inPos);
				h = this.measurePage(inPageIndex) || h;
				this.pageHeights[inPageIndex] = h;
				if (h && (oh != h)) {
					this.updateContentHeight(h - oh);
				}
			} else {
				this.positionPage(inPageIndex, inPos);
			}
			return h;
		}, onscroll:function () {
			this.scroll(this.scrollboxNode.scrollTop);
		}, scroll:function (inTop) {
			this.startPacify();
			this.findPage(inTop);
			var h = this.height;
			var b = this.getScrollBottom(inTop);
			for (var p = this.page, y = this.pageTop; (p < this.pageCount) && ((b < 0) || (y < b)); p++) {
				y += this.needPage(p, y);
			}
			this.firstVisibleRow = this.getFirstVisibleRow(this.page, this.pageTop, inTop);
			this.lastVisibleRow = this.getLastVisibleRow(p - 1, y, b);
			if (h != this.height) {
				this.repositionPages(p - 1);
			}
			this.endPacify();
		}, getScrollBottom:function (inTop) {
			return (this.windowHeight >= 0 ? inTop + this.windowHeight : -1);
		}, processNodeEvent:function (e, inNode) {
			var t = e.target;
			while (t && (t != inNode) && t.parentNode && (t.parentNode.parentNode != inNode)) {
				t = t.parentNode;
			}
			if (!t || !t.parentNode || (t.parentNode.parentNode != inNode)) {
				return false;
			}
			var page = t.parentNode;
			e.topRowIndex = page.pageIndex * this.rowsPerPage;
			e.rowIndex = e.topRowIndex + dojox.grid.indexInParent(t);
			e.rowTarget = t;
			return true;
		}, processEvent:function (e) {
			return this.processNodeEvent(e, this.contentNode);
		}, dummy:0});
		dojo.declare("dojox.grid.scroller", dojox.grid.scroller.base, {constructor:function () {
			this.pageNodes = [];
		}, renderRow:function (inRowIndex, inPageNode) {
		}, removeRow:function (inRowIndex) {
		}, getDefaultNodes:function () {
			return this.pageNodes;
		}, getDefaultPageNode:function (inPageIndex) {
			return this.getDefaultNodes()[inPageIndex];
		}, positionPageNode:function (inNode, inPos) {
			inNode.style.top = inPos + "px";
		}, getPageNodePosition:function (inNode) {
			return inNode.offsetTop;
		}, repositionPageNodes:function (inPageIndex, inNodes) {
			var last = 0;
			for (var i = 0; i < this.stack.length; i++) {
				last = Math.max(this.stack[i], last);
			}
			var n = inNodes[inPageIndex];
			var y = (n ? this.getPageNodePosition(n) + this.getPageHeight(inPageIndex) : 0);
			for (var p = inPageIndex + 1; p <= last; p++) {
				n = inNodes[p];
				if (n) {
					if (this.getPageNodePosition(n) == y) {
						return;
					}
					this.positionPage(p, y);
				}
				y += this.getPageHeight(p);
			}
		}, invalidatePageNode:function (inPageIndex, inNodes) {
			var p = inNodes[inPageIndex];
			if (p) {
				delete inNodes[inPageIndex];
				this.removePage(inPageIndex, p);
				dojox.grid.cleanNode(p);
				p.innerHTML = "";
			}
			return p;
		}, preparePageNode:function (inPageIndex, inReusePageIndex, inNodes) {
			var p = (inReusePageIndex === null ? this.createPageNode() : this.invalidatePageNode(inReusePageIndex, inNodes));
			p.pageIndex = inPageIndex;
			p.id = (this._pageIdPrefix || "") + "page-" + inPageIndex;
			inNodes[inPageIndex] = p;
		}, pageExists:function (inPageIndex) {
			return Boolean(this.getDefaultPageNode(inPageIndex));
		}, measurePage:function (inPageIndex) {
			return this.getDefaultPageNode(inPageIndex).offsetHeight;
		}, positionPage:function (inPageIndex, inPos) {
			this.positionPageNode(this.getDefaultPageNode(inPageIndex), inPos);
		}, repositionPages:function (inPageIndex) {
			this.repositionPageNodes(inPageIndex, this.getDefaultNodes());
		}, preparePage:function (inPageIndex, inReuseNode) {
			this.preparePageNode(inPageIndex, (inReuseNode ? this.popPage() : null), this.getDefaultNodes());
		}, installPage:function (inPageIndex) {
			this.contentNode.appendChild(this.getDefaultPageNode(inPageIndex));
		}, destroyPage:function (inPageIndex) {
			var p = this.invalidatePageNode(inPageIndex, this.getDefaultNodes());
			dojox.grid.removeNode(p);
		}, renderPage:function (inPageIndex) {
			var node = this.pageNodes[inPageIndex];
			for (var i = 0, j = inPageIndex * this.rowsPerPage; (i < this.rowsPerPage) && (j < this.rowCount); i++, j++) {
				this.renderRow(j, node);
			}
		}, removePage:function (inPageIndex) {
			for (var i = 0, j = inPageIndex * this.rowsPerPage; i < this.rowsPerPage; i++, j++) {
				this.removeRow(j);
			}
		}, getPageRow:function (inPage) {
			return inPage * this.rowsPerPage;
		}, getLastPageRow:function (inPage) {
			return Math.min(this.rowCount, this.getPageRow(inPage + 1)) - 1;
		}, getFirstVisibleRowNodes:function (inPage, inPageTop, inScrollTop, inNodes) {
			var row = this.getPageRow(inPage);
			var rows = dojox.grid.divkids(inNodes[inPage]);
			for (var i = 0, l = rows.length; i < l && inPageTop < inScrollTop; i++, row++) {
				inPageTop += rows[i].offsetHeight;
			}
			return (row ? row - 1 : row);
		}, getFirstVisibleRow:function (inPage, inPageTop, inScrollTop) {
			if (!this.pageExists(inPage)) {
				return 0;
			}
			return this.getFirstVisibleRowNodes(inPage, inPageTop, inScrollTop, this.getDefaultNodes());
		}, getLastVisibleRowNodes:function (inPage, inBottom, inScrollBottom, inNodes) {
			var row = this.getLastPageRow(inPage);
			var rows = dojox.grid.divkids(inNodes[inPage]);
			for (var i = rows.length - 1; i >= 0 && inBottom > inScrollBottom; i--, row--) {
				inBottom -= rows[i].offsetHeight;
			}
			return row + 1;
		}, getLastVisibleRow:function (inPage, inBottom, inScrollBottom) {
			if (!this.pageExists(inPage)) {
				return 0;
			}
			return this.getLastVisibleRowNodes(inPage, inBottom, inScrollBottom, this.getDefaultNodes());
		}, findTopRowForNodes:function (inScrollTop, inNodes) {
			var rows = dojox.grid.divkids(inNodes[this.page]);
			for (var i = 0, l = rows.length, t = this.pageTop, h; i < l; i++) {
				h = rows[i].offsetHeight;
				t += h;
				if (t >= inScrollTop) {
					this.offset = h - (t - inScrollTop);
					return i + this.page * this.rowsPerPage;
				}
			}
			return -1;
		}, findScrollTopForNodes:function (inRow, inNodes) {
			var rowPage = Math.floor(inRow / this.rowsPerPage);
			var t = 0;
			for (var i = 0; i < rowPage; i++) {
				t += this.getPageHeight(i);
			}
			this.pageTop = t;
			this.needPage(rowPage, this.pageTop);
			var rows = dojox.grid.divkids(inNodes[rowPage]);
			var r = inRow - this.rowsPerPage * rowPage;
			for (var i = 0, l = rows.length; i < l && i < r; i++) {
				t += rows[i].offsetHeight;
			}
			return t;
		}, findTopRow:function (inScrollTop) {
			return this.findTopRowForNodes(inScrollTop, this.getDefaultNodes());
		}, findScrollTop:function (inRow) {
			return this.findScrollTopForNodes(inRow, this.getDefaultNodes());
		}, dummy:0});
		dojo.declare("dojox.grid.scroller.columns", dojox.grid.scroller, {constructor:function (inContentNodes) {
			this.setContentNodes(inContentNodes);
		}, setContentNodes:function (inNodes) {
			this.contentNodes = inNodes;
			this.colCount = (this.contentNodes ? this.contentNodes.length : 0);
			this.pageNodes = [];
			for (var i = 0; i < this.colCount; i++) {
				this.pageNodes[i] = [];
			}
		}, getDefaultNodes:function () {
			return this.pageNodes[0] || [];
		}, scroll:function (inTop) {
			if (this.colCount) {
				dojox.grid.scroller.prototype.scroll.call(this, inTop);
			}
		}, resize:function () {
			if (this.scrollboxNode) {
				this.windowHeight = this.scrollboxNode.clientHeight;
			}
			for (var i = 0; i < this.colCount; i++) {
				dojox.grid.setStyleHeightPx(this.contentNodes[i], this.height);
			}
		}, positionPage:function (inPageIndex, inPos) {
			for (var i = 0; i < this.colCount; i++) {
				this.positionPageNode(this.pageNodes[i][inPageIndex], inPos);
			}
		}, preparePage:function (inPageIndex, inReuseNode) {
			var p = (inReuseNode ? this.popPage() : null);
			for (var i = 0; i < this.colCount; i++) {
				this.preparePageNode(inPageIndex, p, this.pageNodes[i]);
			}
		}, installPage:function (inPageIndex) {
			for (var i = 0; i < this.colCount; i++) {
				this.contentNodes[i].appendChild(this.pageNodes[i][inPageIndex]);
			}
		}, destroyPage:function (inPageIndex) {
			for (var i = 0; i < this.colCount; i++) {
				dojox.grid.removeNode(this.invalidatePageNode(inPageIndex, this.pageNodes[i]));
			}
		}, renderPage:function (inPageIndex) {
			var nodes = [];
			for (var i = 0; i < this.colCount; i++) {
				nodes[i] = this.pageNodes[i][inPageIndex];
			}
			for (var i = 0, j = inPageIndex * this.rowsPerPage; (i < this.rowsPerPage) && (j < this.rowCount); i++, j++) {
				this.renderRow(j, nodes);
			}
		}});
	}
	if (!dojo._hasResource["dojox.grid._grid.drag"]) {
		dojo._hasResource["dojox.grid._grid.drag"] = true;
		dojo.provide("dojox.grid._grid.drag");
		(function () {
			var dgdrag = dojox.grid.drag = {};
			dgdrag.dragging = false;
			dgdrag.hysteresis = 2;
			dgdrag.capture = function (inElement) {
				if (inElement.setCapture) {
					inElement.setCapture();
				} else {
					document.addEventListener("mousemove", inElement.onmousemove, true);
					document.addEventListener("mouseup", inElement.onmouseup, true);
					document.addEventListener("click", inElement.onclick, true);
				}
			};
			dgdrag.release = function (inElement) {
				if (inElement.releaseCapture) {
					inElement.releaseCapture();
				} else {
					document.removeEventListener("click", inElement.onclick, true);
					document.removeEventListener("mouseup", inElement.onmouseup, true);
					document.removeEventListener("mousemove", inElement.onmousemove, true);
				}
			};
			dgdrag.start = function (inElement, inOnDrag, inOnEnd, inEvent, inOnStart) {
				if (!inElement || dgdrag.dragging) {
					console.debug("failed to start drag: bad input node or already dragging");
					return;
				}
				dgdrag.dragging = true;
				dgdrag.elt = inElement;
				dgdrag.events = {drag:inOnDrag || dojox.grid.nop, end:inOnEnd || dojox.grid.nop, start:inOnStart || dojox.grid.nop, oldmove:inElement.onmousemove, oldup:inElement.onmouseup, oldclick:inElement.onclick};
				dgdrag.positionX = (inEvent && ("screenX" in inEvent) ? inEvent.screenX : false);
				dgdrag.positionY = (inEvent && ("screenY" in inEvent) ? inEvent.screenY : false);
				dgdrag.started = (dgdrag.position === false);
				inElement.onmousemove = dgdrag.mousemove;
				inElement.onmouseup = dgdrag.mouseup;
				inElement.onclick = dgdrag.click;
				dgdrag.capture(dgdrag.elt);
			};
			dgdrag.end = function () {
				dgdrag.release(dgdrag.elt);
				dgdrag.elt.onmousemove = dgdrag.events.oldmove;
				dgdrag.elt.onmouseup = dgdrag.events.oldup;
				dgdrag.elt.onclick = dgdrag.events.oldclick;
				dgdrag.elt = null;
				try {
					if (dgdrag.started) {
						dgdrag.events.end();
					}
				}
				finally {
					dgdrag.dragging = false;
				}
			};
			dgdrag.calcDelta = function (inEvent) {
				inEvent.deltaX = inEvent.screenX - dgdrag.positionX;
				inEvent.deltaY = inEvent.screenY - dgdrag.positionY;
			};
			dgdrag.hasMoved = function (inEvent) {
				return Math.abs(inEvent.deltaX) + Math.abs(inEvent.deltaY) > dgdrag.hysteresis;
			};
			dgdrag.mousemove = function (inEvent) {
				inEvent = dojo.fixEvent(inEvent);
				dojo.stopEvent(inEvent);
				dgdrag.calcDelta(inEvent);
				if ((!dgdrag.started) && (dgdrag.hasMoved(inEvent))) {
					dgdrag.events.start(inEvent);
					dgdrag.started = true;
				}
				if (dgdrag.started) {
					dgdrag.events.drag(inEvent);
				}
			};
			dgdrag.mouseup = function (inEvent) {
				dojo.stopEvent(dojo.fixEvent(inEvent));
				dgdrag.end();
			};
			dgdrag.click = function (inEvent) {
				dojo.stopEvent(dojo.fixEvent(inEvent));
			};
		})();
	}
	if (!dojo._hasResource["dojox.grid._grid.builder"]) {
		dojo._hasResource["dojox.grid._grid.builder"] = true;
		dojo.provide("dojox.grid._grid.builder");
		dojo.declare("dojox.grid.Builder", null, {constructor:function (inView) {
			this.view = inView;
			this.grid = inView.grid;
		}, view:null, _table:"<table class=\"dojoxGrid-row-table\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\" role=\"wairole:presentation\">", generateCellMarkup:function (inCell, inMoreStyles, inMoreClasses, isHeader) {
			var result = [], html;
			if (isHeader) {
				html = ["<th tabIndex=\"-1\" role=\"wairole:columnheader\""];
			} else {
				html = ["<td tabIndex=\"-1\" role=\"wairole:gridcell\""];
			}
			inCell.colSpan && html.push(" colspan=\"", inCell.colSpan, "\"");
			inCell.rowSpan && html.push(" rowspan=\"", inCell.rowSpan, "\"");
			html.push(" class=\"dojoxGrid-cell ");
			inCell.classes && html.push(inCell.classes, " ");
			inMoreClasses && html.push(inMoreClasses, " ");
			result.push(html.join(""));
			result.push("");
			html = ["\" idx=\"", inCell.index, "\" style=\""];
			html.push(inCell.styles, inMoreStyles || "");
			inCell.unitWidth && html.push("width:", inCell.unitWidth, ";");
			result.push(html.join(""));
			result.push("");
			html = ["\""];
			inCell.attrs && html.push(" ", inCell.attrs);
			html.push(">");
			result.push(html.join(""));
			result.push("");
			result.push("</td>");
			return result;
		}, isCellNode:function (inNode) {
			return Boolean(inNode && inNode.getAttribute && inNode.getAttribute("idx"));
		}, getCellNodeIndex:function (inCellNode) {
			return inCellNode ? Number(inCellNode.getAttribute("idx")) : -1;
		}, getCellNode:function (inRowNode, inCellIndex) {
			for (var i = 0, row; row = dojox.grid.getTr(inRowNode.firstChild, i); i++) {
				for (var j = 0, cell; cell = row.cells[j]; j++) {
					if (this.getCellNodeIndex(cell) == inCellIndex) {
						return cell;
					}
				}
			}
		}, findCellTarget:function (inSourceNode, inTopNode) {
			var n = inSourceNode;
			while (n && (!this.isCellNode(n) || (dojox.grid.gridViewTag in n.offsetParent.parentNode && n.offsetParent.parentNode[dojox.grid.gridViewTag] != this.view.id)) && (n != inTopNode)) {
				n = n.parentNode;
			}
			return n != inTopNode ? n : null;
		}, baseDecorateEvent:function (e) {
			e.dispatch = "do" + e.type;
			e.grid = this.grid;
			e.sourceView = this.view;
			e.cellNode = this.findCellTarget(e.target, e.rowNode);
			e.cellIndex = this.getCellNodeIndex(e.cellNode);
			e.cell = (e.cellIndex >= 0 ? this.grid.getCell(e.cellIndex) : null);
		}, findTarget:function (inSource, inTag) {
			var n = inSource;
			while (n && (n != this.domNode) && (!(inTag in n) || (dojox.grid.gridViewTag in n && n[dojox.grid.gridViewTag] != this.view.id))) {
				n = n.parentNode;
			}
			return (n != this.domNode) ? n : null;
		}, findRowTarget:function (inSource) {
			return this.findTarget(inSource, dojox.grid.rowIndexTag);
		}, isIntraNodeEvent:function (e) {
			try {
				return (e.cellNode && e.relatedTarget && dojo.isDescendant(e.relatedTarget, e.cellNode));
			}
			catch (x) {
				return false;
			}
		}, isIntraRowEvent:function (e) {
			try {
				var row = e.relatedTarget && this.findRowTarget(e.relatedTarget);
				return !row && (e.rowIndex == -1) || row && (e.rowIndex == row.gridRowIndex);
			}
			catch (x) {
				return false;
			}
		}, dispatchEvent:function (e) {
			if (e.dispatch in this) {
				return this[e.dispatch](e);
			}
		}, domouseover:function (e) {
			if (e.cellNode && (e.cellNode != this.lastOverCellNode)) {
				this.lastOverCellNode = e.cellNode;
				this.grid.onMouseOver(e);
			}
			this.grid.onMouseOverRow(e);
		}, domouseout:function (e) {
			if (e.cellNode && (e.cellNode == this.lastOverCellNode) && !this.isIntraNodeEvent(e, this.lastOverCellNode)) {
				this.lastOverCellNode = null;
				this.grid.onMouseOut(e);
				if (!this.isIntraRowEvent(e)) {
					this.grid.onMouseOutRow(e);
				}
			}
		}, domousedown:function (e) {
			if (e.cellNode) {
				this.grid.onMouseDown(e);
			}
			this.grid.onMouseDownRow(e);
		}});
		dojo.declare("dojox.grid.contentBuilder", dojox.grid.Builder, {update:function () {
			this.prepareHtml();
		}, prepareHtml:function () {
			var defaultGet = this.grid.get, rows = this.view.structure.rows;
			for (var j = 0, row; (row = rows[j]); j++) {
				for (var i = 0, cell; (cell = row[i]); i++) {
					cell.get = cell.get || (cell.value == undefined) && defaultGet;
					cell.markup = this.generateCellMarkup(cell, cell.cellStyles, cell.cellClasses, false);
				}
			}
		}, generateHtml:function (inDataIndex, inRowIndex) {
			var html = [this._table], v = this.view, obr = v.onBeforeRow, rows = v.structure.rows;
			obr && obr(inRowIndex, rows);
			for (var j = 0, row; (row = rows[j]); j++) {
				if (row.hidden || row.header) {
					continue;
				}
				html.push(!row.invisible ? "<tr>" : "<tr class=\"dojoxGrid-invisible\">");
				for (var i = 0, cell, m, cc, cs; (cell = row[i]); i++) {
					m = cell.markup, cc = cell.customClasses = [], cs = cell.customStyles = [];
					m[5] = cell.format(inDataIndex);
					m[1] = cc.join(" ");
					m[3] = cs.join(";");
					html.push.apply(html, m);
				}
				html.push("</tr>");
			}
			html.push("</table>");
			return html.join("");
		}, decorateEvent:function (e) {
			e.rowNode = this.findRowTarget(e.target);
			if (!e.rowNode) {
				return false;
			}
			e.rowIndex = e.rowNode[dojox.grid.rowIndexTag];
			this.baseDecorateEvent(e);
			e.cell = this.grid.getCell(e.cellIndex);
			return true;
		}});
		dojo.declare("dojox.grid.headerBuilder", dojox.grid.Builder, {bogusClickTime:0, overResizeWidth:4, minColWidth:1, _table:"<table class=\"dojoxGrid-row-table\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\" role=\"wairole:presentation\"", update:function () {
			this.tableMap = new dojox.grid.tableMap(this.view.structure.rows);
		}, generateHtml:function (inGetValue, inValue) {
			var html = [this._table], rows = this.view.structure.rows;
			if (this.view.viewWidth) {
				html.push([" style=\"width:", this.view.viewWidth, ";\""].join(""));
			}
			html.push(">");
			dojox.grid.fire(this.view, "onBeforeRow", [-1, rows]);
			for (var j = 0, row; (row = rows[j]); j++) {
				if (row.hidden) {
					continue;
				}
				html.push(!row.invisible ? "<tr>" : "<tr class=\"dojoxGrid-invisible\">");
				for (var i = 0, cell, markup; (cell = row[i]); i++) {
					cell.customClasses = [];
					cell.customStyles = [];
					markup = this.generateCellMarkup(cell, cell.headerStyles, cell.headerClasses, true);
					markup[5] = (inValue != undefined ? inValue : inGetValue(cell));
					markup[3] = cell.customStyles.join(";");
					markup[1] = cell.customClasses.join(" ");
					html.push(markup.join(""));
				}
				html.push("</tr>");
			}
			html.push("</table>");
			return html.join("");
		}, getCellX:function (e) {
			var x = e.layerX;
			if (dojo.isMoz) {
				var n = dojox.grid.ascendDom(e.target, dojox.grid.makeNotTagName("th"));
				x -= (n && n.offsetLeft) || 0;
				var t = e.sourceView.getScrollbarWidth();
				if (!dojo._isBodyLtr() && e.sourceView.headerNode.scrollLeft < t) {
					x -= t;
				}
			}
			var n = dojox.grid.ascendDom(e.target, function () {
				if (!n || n == e.cellNode) {
					return false;
				}
				x += (n.offsetLeft < 0 ? 0 : n.offsetLeft);
				return true;
			});
			return x;
		}, decorateEvent:function (e) {
			this.baseDecorateEvent(e);
			e.rowIndex = -1;
			e.cellX = this.getCellX(e);
			return true;
		}, prepareResize:function (e, mod) {
			var i = dojox.grid.getTdIndex(e.cellNode);
			e.cellNode = (i ? e.cellNode.parentNode.cells[i + mod] : null);
			e.cellIndex = (e.cellNode ? this.getCellNodeIndex(e.cellNode) : -1);
			return Boolean(e.cellNode);
		}, canResize:function (e) {
			if (!e.cellNode || e.cellNode.colSpan > 1) {
				return false;
			}
			var cell = this.grid.getCell(e.cellIndex);
			return !cell.noresize && !cell.isFlex();
		}, overLeftResizeArea:function (e) {
			if (dojo._isBodyLtr()) {
				return (e.cellIndex > 0) && (e.cellX < this.overResizeWidth) && this.prepareResize(e, -1);
			}
			return t = e.cellNode && (e.cellX < this.overResizeWidth);
		}, overRightResizeArea:function (e) {
			if (dojo._isBodyLtr()) {
				return e.cellNode && (e.cellX >= e.cellNode.offsetWidth - this.overResizeWidth);
			}
			return (e.cellIndex > 0) && (e.cellX >= e.cellNode.offsetWidth - this.overResizeWidth) && this.prepareResize(e, -1);
		}, domousemove:function (e) {
			var c = (this.overRightResizeArea(e) ? "e-resize" : (this.overLeftResizeArea(e) ? "w-resize" : ""));
			if (c && !this.canResize(e)) {
				c = "not-allowed";
			}
			e.sourceView.headerNode.style.cursor = c || "";
			if (c) {
				dojo.stopEvent(e);
			}
		}, domousedown:function (e) {
			if (!dojox.grid.drag.dragging) {
				if ((this.overRightResizeArea(e) || this.overLeftResizeArea(e)) && this.canResize(e)) {
					this.beginColumnResize(e);
				} else {
					this.grid.onMouseDown(e);
					this.grid.onMouseOverRow(e);
				}
			}
		}, doclick:function (e) {
			if (new Date().getTime() < this.bogusClickTime) {
				dojo.stopEvent(e);
				return true;
			}
		}, beginColumnResize:function (e) {
			dojo.stopEvent(e);
			var spanners = [], nodes = this.tableMap.findOverlappingNodes(e.cellNode);
			for (var i = 0, cell; (cell = nodes[i]); i++) {
				spanners.push({node:cell, index:this.getCellNodeIndex(cell), width:cell.offsetWidth});
			}
			var drag = {scrollLeft:e.sourceView.headerNode.scrollLeft, view:e.sourceView, node:e.cellNode, index:e.cellIndex, w:e.cellNode.clientWidth, spanners:spanners};
			dojox.grid.drag.start(e.cellNode, dojo.hitch(this, "doResizeColumn", drag), dojo.hitch(this, "endResizeColumn", drag), e);
		}, doResizeColumn:function (inDrag, inEvent) {
			var isLtr = dojo._isBodyLtr();
			if (isLtr) {
				var w = inDrag.w + inEvent.deltaX;
			} else {
				var w = inDrag.w - inEvent.deltaX;
			}
			if (w >= this.minColWidth) {
				for (var i = 0, s, sw; (s = inDrag.spanners[i]); i++) {
					if (isLtr) {
						sw = s.width + inEvent.deltaX;
					} else {
						sw = s.width - inEvent.deltaX;
					}
					s.node.style.width = sw + "px";
					inDrag.view.setColWidth(s.index, sw);
				}
				inDrag.node.style.width = w + "px";
				inDrag.view.setColWidth(inDrag.index, w);
				if (!isLtr) {
					inDrag.view.headerNode.scrollLeft = (inDrag.scrollLeft - inEvent.deltaX);
				}
			}
			if (inDrag.view.flexCells && !inDrag.view.testFlexCells()) {
				var t = dojox.grid.findTable(inDrag.node);
				t && (t.style.width = "");
			}
		}, endResizeColumn:function (inDrag) {
			this.bogusClickTime = new Date().getTime() + 30;
			setTimeout(dojo.hitch(inDrag.view, "update"), 50);
		}});
		dojo.declare("dojox.grid.tableMap", null, {constructor:function (inRows) {
			this.mapRows(inRows);
		}, map:null, mapRows:function (inRows) {
			var rowCount = inRows.length;
			if (!rowCount) {
				return;
			}
			this.map = [];
			for (var j = 0, row; (row = inRows[j]); j++) {
				this.map[j] = [];
			}
			for (var j = 0, row; (row = inRows[j]); j++) {
				for (var i = 0, x = 0, cell, colSpan, rowSpan; (cell = row[i]); i++) {
					while (this.map[j][x]) {
						x++;
					}
					this.map[j][x] = {c:i, r:j};
					rowSpan = cell.rowSpan || 1;
					colSpan = cell.colSpan || 1;
					for (var y = 0; y < rowSpan; y++) {
						for (var s = 0; s < colSpan; s++) {
							this.map[j + y][x + s] = this.map[j][x];
						}
					}
					x += colSpan;
				}
			}
		}, dumpMap:function () {
			for (var j = 0, row, h = ""; (row = this.map[j]); j++, h = "") {
				for (var i = 0, cell; (cell = row[i]); i++) {
					h += cell.r + "," + cell.c + "   ";
				}
				console.log(h);
			}
		}, getMapCoords:function (inRow, inCol) {
			for (var j = 0, row; (row = this.map[j]); j++) {
				for (var i = 0, cell; (cell = row[i]); i++) {
					if (cell.c == inCol && cell.r == inRow) {
						return {j:j, i:i};
					}
				}
			}
			return {j:-1, i:-1};
		}, getNode:function (inTable, inRow, inCol) {
			var row = inTable && inTable.rows[inRow];
			return row && row.cells[inCol];
		}, _findOverlappingNodes:function (inTable, inRow, inCol) {
			var nodes = [];
			var m = this.getMapCoords(inRow, inCol);
			var row = this.map[m.j];
			for (var j = 0, row; (row = this.map[j]); j++) {
				if (j == m.j) {
					continue;
				}
				with (row[m.i]) {
					var n = this.getNode(inTable, r, c);
					if (n) {
						nodes.push(n);
					}
				}
			}
			return nodes;
		}, findOverlappingNodes:function (inNode) {
			return this._findOverlappingNodes(dojox.grid.findTable(inNode), dojox.grid.getTrIndex(inNode.parentNode), dojox.grid.getTdIndex(inNode));
		}});
		dojox.grid.rowIndexTag = "gridRowIndex";
		dojox.grid.gridViewTag = "gridView";
	}
	if (!dojo._hasResource["dojox.grid._grid.view"]) {
		dojo._hasResource["dojox.grid._grid.view"] = true;
		dojo.provide("dojox.grid._grid.view");
		dojo.declare("dojox.GridView", [dijit._Widget, dijit._Templated], {defaultWidth:"18em", viewWidth:"", templateString:"<div class=\"dojoxGrid-view\">\n\t<div class=\"dojoxGrid-header\" dojoAttachPoint=\"headerNode\">\n\t\t<div dojoAttachPoint=\"headerNodeContainer\" style=\"width:9000em\">\n\t\t\t<div dojoAttachPoint=\"headerContentNode\"></div>\n\t\t</div>\n\t</div>\n\t<input type=\"checkbox\" class=\"dojoxGrid-hidden-focus\" dojoAttachPoint=\"hiddenFocusNode\" />\n\t<input type=\"checkbox\" class=\"dojoxGrid-hidden-focus\" />\n\t<div class=\"dojoxGrid-scrollbox\" dojoAttachPoint=\"scrollboxNode\">\n\t\t<div class=\"dojoxGrid-content\" dojoAttachPoint=\"contentNode\" hidefocus=\"hidefocus\"></div>\n\t</div>\n</div>\n", themeable:false, classTag:"dojoxGrid", marginBottom:0, rowPad:2, postMixInProperties:function () {
			this.rowNodes = [];
		}, postCreate:function () {
			this.connect(this.scrollboxNode, "onscroll", "doscroll");
			dojox.grid.funnelEvents(this.contentNode, this, "doContentEvent", ["mouseover", "mouseout", "click", "dblclick", "contextmenu", "mousedown"]);
			dojox.grid.funnelEvents(this.headerNode, this, "doHeaderEvent", ["dblclick", "mouseover", "mouseout", "mousemove", "mousedown", "click", "contextmenu"]);
			this.content = new dojox.grid.contentBuilder(this);
			this.header = new dojox.grid.headerBuilder(this);
			if (!dojo._isBodyLtr()) {
				this.headerNodeContainer.style.width = "";
			}
		}, destroy:function () {
			dojox.grid.removeNode(this.headerNode);
			this.inherited("destroy", arguments);
		}, focus:function () {
			if (dojo.isSafari || dojo.isOpera) {
				this.hiddenFocusNode.focus();
			} else {
				this.scrollboxNode.focus();
			}
		}, setStructure:function (inStructure) {
			var vs = this.structure = inStructure;
			if (vs.width && !isNaN(vs.width)) {
				this.viewWidth = vs.width + "em";
			} else {
				this.viewWidth = vs.width || this.viewWidth;
			}
			this.onBeforeRow = vs.onBeforeRow;
			this.noscroll = vs.noscroll;
			if (this.noscroll) {
				this.scrollboxNode.style.overflow = "hidden";
			}
			this.testFlexCells();
			this.updateStructure();
		}, testFlexCells:function () {
			this.flexCells = false;
			for (var j = 0, row; (row = this.structure.rows[j]); j++) {
				for (var i = 0, cell; (cell = row[i]); i++) {
					cell.view = this;
					this.flexCells = this.flexCells || cell.isFlex();
				}
			}
			return this.flexCells;
		}, updateStructure:function () {
			this.header.update();
			this.content.update();
		}, getScrollbarWidth:function () {
			return (this.noscroll ? 0 : dojox.grid.getScrollbarWidth());
		}, getColumnsWidth:function () {
			return this.headerContentNode.firstChild.offsetWidth;
		}, getWidth:function () {
			return this.viewWidth || (this.getColumnsWidth() + this.getScrollbarWidth()) + "px";
		}, getContentWidth:function () {
			return Math.max(0, dojo._getContentBox(this.domNode).w - this.getScrollbarWidth()) + "px";
		}, render:function () {
			this.scrollboxNode.style.height = "";
			this.renderHeader();
		}, renderHeader:function () {
			this.headerContentNode.innerHTML = this.header.generateHtml(this._getHeaderContent);
		}, _getHeaderContent:function (inCell) {
			var n = inCell.name || inCell.grid.getCellName(inCell);
			if (inCell.index != inCell.grid.getSortIndex()) {
				return n;
			}
			return ["<div class=\"", inCell.grid.sortInfo > 0 ? "dojoxGrid-sort-down" : "dojoxGrid-sort-up", "\"><div class=\"gridArrowButtonChar\">", inCell.grid.sortInfo > 0 ? "&#9660;" : "&#9650;", "</div>", n, "</div>"].join("");
		}, resize:function () {
			this.adaptHeight();
			this.adaptWidth();
		}, hasScrollbar:function () {
			return (this.scrollboxNode.clientHeight != this.scrollboxNode.offsetHeight);
		}, adaptHeight:function () {
			if (!this.grid.autoHeight) {
				var h = this.domNode.clientHeight;
				if (!this.hasScrollbar()) {
					h -= dojox.grid.getScrollbarWidth();
				}
				dojox.grid.setStyleHeightPx(this.scrollboxNode, h);
			}
		}, adaptWidth:function () {
			if (this.flexCells) {
				this.contentWidth = this.getContentWidth();
				this.headerContentNode.firstChild.style.width = this.contentWidth;
			}
			var w = this.scrollboxNode.offsetWidth - this.getScrollbarWidth();
			w = Math.max(w, this.getColumnsWidth()) + "px";
			with (this.contentNode) {
				style.width = "";
				offsetWidth;
				style.width = w;
			}
		}, setSize:function (w, h) {
			with (this.domNode.style) {
				if (w) {
					width = w;
				}
				height = (h >= 0 ? h + "px" : "");
			}
			with (this.headerNode.style) {
				if (w) {
					width = w;
				}
			}
		}, renderRow:function (inRowIndex, inHeightPx) {
			var rowNode = this.createRowNode(inRowIndex);
			this.buildRow(inRowIndex, rowNode, inHeightPx);
			this.grid.edit.restore(this, inRowIndex);
			return rowNode;
		}, createRowNode:function (inRowIndex) {
			var node = document.createElement("div");
			node.className = this.classTag + "-row";
			node[dojox.grid.gridViewTag] = this.id;
			node[dojox.grid.rowIndexTag] = inRowIndex;
			this.rowNodes[inRowIndex] = node;
			return node;
		}, buildRow:function (inRowIndex, inRowNode) {
			this.buildRowContent(inRowIndex, inRowNode);
			this.styleRow(inRowIndex, inRowNode);
		}, buildRowContent:function (inRowIndex, inRowNode) {
			inRowNode.innerHTML = this.content.generateHtml(inRowIndex, inRowIndex);
			if (this.flexCells) {
				inRowNode.firstChild.style.width = this.contentWidth;
			}
		}, rowRemoved:function (inRowIndex) {
			this.grid.edit.save(this, inRowIndex);
			delete this.rowNodes[inRowIndex];
		}, getRowNode:function (inRowIndex) {
			return this.rowNodes[inRowIndex];
		}, getCellNode:function (inRowIndex, inCellIndex) {
			var row = this.getRowNode(inRowIndex);
			if (row) {
				return this.content.getCellNode(row, inCellIndex);
			}
		}, styleRow:function (inRowIndex, inRowNode) {
			inRowNode._style = dojox.grid.getStyleText(inRowNode);
			this.styleRowNode(inRowIndex, inRowNode);
		}, styleRowNode:function (inRowIndex, inRowNode) {
			if (inRowNode) {
				this.doStyleRowNode(inRowIndex, inRowNode);
			}
		}, doStyleRowNode:function (inRowIndex, inRowNode) {
			this.grid.styleRowNode(inRowIndex, inRowNode);
		}, updateRow:function (inRowIndex, inHeightPx, inPageNode) {
			var rowNode = this.getRowNode(inRowIndex);
			if (rowNode) {
				rowNode.style.height = "";
				this.buildRow(inRowIndex, rowNode);
			}
			return rowNode;
		}, updateRowStyles:function (inRowIndex) {
			this.styleRowNode(inRowIndex, this.getRowNode(inRowIndex));
		}, lastTop:0, firstScroll:0, doscroll:function (inEvent) {
			var isLtr = dojo._isBodyLtr();
			if (this.firstScroll < 2) {
				if ((!isLtr && this.firstScroll == 1) || (isLtr && this.firstScroll == 0)) {
					var s = dojo.marginBox(this.headerNodeContainer);
					if (dojo.isIE) {
						this.headerNodeContainer.style.width = s.w + this.getScrollbarWidth() + "px";
					} else {
						if (dojo.isMoz) {
							this.headerNodeContainer.style.width = s.w - this.getScrollbarWidth() + "px";
							if (isLtr) {
								this.scrollboxNode.scrollLeft = this.scrollboxNode.scrollWidth - this.scrollboxNode.clientWidth;
							} else {
								this.scrollboxNode.scrollLeft = this.scrollboxNode.clientWidth - this.scrollboxNode.scrollWidth;
							}
						}
					}
				}
				this.firstScroll++;
			}
			this.headerNode.scrollLeft = this.scrollboxNode.scrollLeft;
			var top = this.scrollboxNode.scrollTop;
			if (top != this.lastTop) {
				this.grid.scrollTo(top);
			}
		}, setScrollTop:function (inTop) {
			this.lastTop = inTop;
			this.scrollboxNode.scrollTop = inTop;
			return this.scrollboxNode.scrollTop;
		}, doContentEvent:function (e) {
			if (this.content.decorateEvent(e)) {
				this.grid.onContentEvent(e);
			}
		}, doHeaderEvent:function (e) {
			if (this.header.decorateEvent(e)) {
				this.grid.onHeaderEvent(e);
			}
		}, dispatchContentEvent:function (e) {
			return this.content.dispatchEvent(e);
		}, dispatchHeaderEvent:function (e) {
			return this.header.dispatchEvent(e);
		}, setColWidth:function (inIndex, inWidth) {
			this.grid.setCellWidth(inIndex, inWidth + "px");
		}, update:function () {
			var left = this.scrollboxNode.scrollLeft;
			this.content.update();
			this.grid.update();
			this.scrollboxNode.scrollLeft = left;
			this.headerNode.scrollLeft = left;
		}});
	}
	if (!dojo._hasResource["dojox.grid._grid.views"]) {
		dojo._hasResource["dojox.grid._grid.views"] = true;
		dojo.provide("dojox.grid._grid.views");
		dojo.declare("dojox.grid.views", null, {constructor:function (inGrid) {
			this.grid = inGrid;
		}, defaultWidth:200, views:[], resize:function () {
			this.onEach("resize");
		}, render:function () {
			this.onEach("render");
		}, addView:function (inView) {
			inView.idx = this.views.length;
			this.views.push(inView);
		}, destroyViews:function () {
			for (var i = 0, v; v = this.views[i]; i++) {
				v.destroy();
			}
			this.views = [];
		}, getContentNodes:function () {
			var nodes = [];
			for (var i = 0, v; v = this.views[i]; i++) {
				nodes.push(v.contentNode);
			}
			return nodes;
		}, forEach:function (inCallback) {
			for (var i = 0, v; v = this.views[i]; i++) {
				inCallback(v, i);
			}
		}, onEach:function (inMethod, inArgs) {
			inArgs = inArgs || [];
			for (var i = 0, v; v = this.views[i]; i++) {
				if (inMethod in v) {
					v[inMethod].apply(v, inArgs);
				}
			}
		}, normalizeHeaderNodeHeight:function () {
			var rowNodes = [];
			for (var i = 0, v; (v = this.views[i]); i++) {
				if (v.headerContentNode.firstChild) {
					rowNodes.push(v.headerContentNode);
				}
			}
			this.normalizeRowNodeHeights(rowNodes);
		}, normalizeRowNodeHeights:function (inRowNodes) {
			var h = 0;
			for (var i = 0, n, o; (n = inRowNodes[i]); i++) {
				h = Math.max(h, (n.firstChild.clientHeight) || (n.firstChild.offsetHeight));
			}
			h = (h >= 0 ? h : 0);
			var hpx = h + "px";
			for (var i = 0, n; (n = inRowNodes[i]); i++) {
				if (n.firstChild.clientHeight != h) {
					n.firstChild.style.height = hpx;
				}
			}
			if (inRowNodes && inRowNodes[0]) {
				inRowNodes[0].parentNode.offsetHeight;
			}
		}, resetHeaderNodeHeight:function () {
			for (var i = 0, v, n; (v = this.views[i]); i++) {
				n = v.headerContentNode.firstChild;
				if (n) {
					n.style.height = "";
				}
			}
		}, renormalizeRow:function (inRowIndex) {
			var rowNodes = [];
			for (var i = 0, v, n; (v = this.views[i]) && (n = v.getRowNode(inRowIndex)); i++) {
				n.firstChild.style.height = "";
				rowNodes.push(n);
			}
			this.normalizeRowNodeHeights(rowNodes);
		}, getViewWidth:function (inIndex) {
			return this.views[inIndex].getWidth() || this.defaultWidth;
		}, measureHeader:function () {
			this.resetHeaderNodeHeight();
			this.forEach(function (inView) {
				inView.headerContentNode.style.height = "";
			});
			var h = 0;
			this.forEach(function (inView) {
				h = Math.max(inView.headerNode.offsetHeight, h);
			});
			return h;
		}, measureContent:function () {
			var h = 0;
			this.forEach(function (inView) {
				h = Math.max(inView.domNode.offsetHeight, h);
			});
			return h;
		}, findClient:function (inAutoWidth) {
			var c = this.grid.elasticView || -1;
			if (c < 0) {
				for (var i = 1, v; (v = this.views[i]); i++) {
					if (v.viewWidth) {
						for (i = 1; (v = this.views[i]); i++) {
							if (!v.viewWidth) {
								c = i;
								break;
							}
						}
						break;
					}
				}
			}
			if (c < 0) {
				c = Math.floor(this.views.length / 2);
			}
			return c;
		}, arrange:function (l, w) {
			var i, v, vw, len = this.views.length;
			var c = (w <= 0 ? len : this.findClient());
			var setPosition = function (v, l) {
				with (v.domNode.style) {
					if (!dojo._isBodyLtr()) {
						right = l + "px";
					} else {
						left = l + "px";
					}
					top = 0 + "px";
				}
				with (v.headerNode.style) {
					if (!dojo._isBodyLtr()) {
						right = l + "px";
					} else {
						left = l + "px";
					}
					top = 0;
				}
			};
			for (i = 0; (v = this.views[i]) && (i < c); i++) {
				vw = this.getViewWidth(i);
				v.setSize(vw, 0);
				setPosition(v, l);
				vw = v.domNode.offsetWidth;
				l += vw;
			}
			i++;
			var r = w;
			for (var j = len - 1; (v = this.views[j]) && (i <= j); j--) {
				vw = this.getViewWidth(j);
				v.setSize(vw, 0);
				vw = v.domNode.offsetWidth;
				r -= vw;
				setPosition(v, r);
			}
			if (c < len) {
				v = this.views[c];
				vw = Math.max(1, r - l);
				v.setSize(vw + "px", 0);
				setPosition(v, l);
			}
			return l;
		}, renderRow:function (inRowIndex, inNodes) {
			var rowNodes = [];
			for (var i = 0, v, n, rowNode; (v = this.views[i]) && (n = inNodes[i]); i++) {
				rowNode = v.renderRow(inRowIndex);
				n.appendChild(rowNode);
				rowNodes.push(rowNode);
			}
			this.normalizeRowNodeHeights(rowNodes);
		}, rowRemoved:function (inRowIndex) {
			this.onEach("rowRemoved", [inRowIndex]);
		}, updateRow:function (inRowIndex, inHeight) {
			for (var i = 0, v; v = this.views[i]; i++) {
				v.updateRow(inRowIndex, inHeight);
			}
			this.renormalizeRow(inRowIndex);
		}, updateRowStyles:function (inRowIndex) {
			this.onEach("updateRowStyles", [inRowIndex]);
		}, setScrollTop:function (inTop) {
			var top = inTop;
			for (var i = 0, v; v = this.views[i]; i++) {
				top = v.setScrollTop(inTop);
			}
			return top;
		}, getFirstScrollingView:function () {
			for (var i = 0, v; (v = this.views[i]); i++) {
				if (v.hasScrollbar()) {
					return v;
				}
			}
		}});
	}
	if (!dojo._hasResource["dojox.grid._grid.cell"]) {
		dojo._hasResource["dojox.grid._grid.cell"] = true;
		dojo.provide("dojox.grid._grid.cell");
		dojo.declare("dojox.grid.cell", null, {styles:"", constructor:function (inProps) {
			dojo.mixin(this, inProps);
			if (this.editor) {
				this.editor = new this.editor(this);
			}
		}, format:function (inRowIndex) {
			var f, i = this.grid.edit.info, d = this.get ? this.get(inRowIndex) : this.value;
			if (this.editor && (this.editor.alwaysOn || (i.rowIndex == inRowIndex && i.cell == this))) {
				return this.editor.format(d, inRowIndex);
			} else {
				return (f = this.formatter) ? f.call(this, d, inRowIndex) : d;
			}
		}, getNode:function (inRowIndex) {
			return this.view.getCellNode(inRowIndex, this.index);
		}, isFlex:function () {
			var uw = this.unitWidth;
			return uw && (uw == "auto" || uw.slice(-1) == "%");
		}, applyEdit:function (inValue, inRowIndex) {
			this.grid.edit.applyCellEdit(inValue, this, inRowIndex);
		}, cancelEdit:function (inRowIndex) {
			this.grid.doCancelEdit(inRowIndex);
		}, _onEditBlur:function (inRowIndex) {
			if (this.grid.edit.isEditCell(inRowIndex, this.index)) {
				this.grid.edit.apply();
			}
		}, registerOnBlur:function (inNode, inRowIndex) {
			if (this.commitOnBlur) {
				dojo.connect(inNode, "onblur", function (e) {
					setTimeout(dojo.hitch(this, "_onEditBlur", inRowIndex), 250);
				});
			}
		}});
	}
	if (!dojo._hasResource["dojox.grid._grid.layout"]) {
		dojo._hasResource["dojox.grid._grid.layout"] = true;
		dojo.provide("dojox.grid._grid.layout");
		dojo.declare("dojox.grid.layout", null, {constructor:function (inGrid) {
			this.grid = inGrid;
		}, cells:[], structure:null, defaultWidth:"6em", setStructure:function (inStructure) {
			this.fieldIndex = 0;
			this.cells = [];
			var s = this.structure = [];
			for (var i = 0, viewDef, rows; (viewDef = inStructure[i]); i++) {
				s.push(this.addViewDef(viewDef));
			}
			this.cellCount = this.cells.length;
		}, addViewDef:function (inDef) {
			this._defaultCellProps = inDef.defaultCell || {};
			return dojo.mixin({}, inDef, {rows:this.addRowsDef(inDef.rows || inDef.cells)});
		}, addRowsDef:function (inDef) {
			var result = [];
			for (var i = 0, row; inDef && (row = inDef[i]); i++) {
				result.push(this.addRowDef(i, row));
			}
			return result;
		}, addRowDef:function (inRowIndex, inDef) {
			var result = [];
			for (var i = 0, def, cell; (def = inDef[i]); i++) {
				cell = this.addCellDef(inRowIndex, i, def);
				result.push(cell);
				this.cells.push(cell);
			}
			return result;
		}, addCellDef:function (inRowIndex, inCellIndex, inDef) {
			var w = 0;
			if (inDef.colSpan > 1) {
				w = 0;
			} else {
				if (!isNaN(inDef.width)) {
					w = inDef.width + "em";
				} else {
					w = inDef.width || this.defaultWidth;
				}
			}
			var fieldIndex = inDef.field != undefined ? inDef.field : (inDef.get ? -1 : this.fieldIndex);
			if ((inDef.field != undefined) || !inDef.get) {
				this.fieldIndex = (inDef.field > -1 ? inDef.field : this.fieldIndex) + 1;
			}
			return new dojox.grid.cell(dojo.mixin({}, this._defaultCellProps, inDef, {grid:this.grid, subrow:inRowIndex, layoutIndex:inCellIndex, index:this.cells.length, fieldIndex:fieldIndex, unitWidth:w}));
		}});
	}
	if (!dojo._hasResource["dojox.grid._grid.rows"]) {
		dojo._hasResource["dojox.grid._grid.rows"] = true;
		dojo.provide("dojox.grid._grid.rows");
		dojo.declare("dojox.grid.rows", null, {constructor:function (inGrid) {
			this.grid = inGrid;
		}, linesToEms:2, defaultRowHeight:1, overRow:-2, getHeight:function (inRowIndex) {
			return "";
		}, getDefaultHeightPx:function () {
			return 32;
		}, prepareStylingRow:function (inRowIndex, inRowNode) {
			return {index:inRowIndex, node:inRowNode, odd:Boolean(inRowIndex & 1), selected:this.grid.selection.isSelected(inRowIndex), over:this.isOver(inRowIndex), customStyles:"", customClasses:"dojoxGrid-row"};
		}, styleRowNode:function (inRowIndex, inRowNode) {
			var row = this.prepareStylingRow(inRowIndex, inRowNode);
			this.grid.onStyleRow(row);
			this.applyStyles(row);
		}, applyStyles:function (inRow) {
			with (inRow) {
				node.className = customClasses;
				var h = node.style.height;
				dojox.grid.setStyleText(node, customStyles + ";" + (node._style || ""));
				node.style.height = h;
			}
		}, updateStyles:function (inRowIndex) {
			this.grid.updateRowStyles(inRowIndex);
		}, setOverRow:function (inRowIndex) {
			var last = this.overRow;
			this.overRow = inRowIndex;
			if ((last != this.overRow) && (last >= 0)) {
				this.updateStyles(last);
			}
			this.updateStyles(this.overRow);
		}, isOver:function (inRowIndex) {
			return (this.overRow == inRowIndex);
		}});
	}
	if (!dojo._hasResource["dojox.grid._grid.focus"]) {
		dojo._hasResource["dojox.grid._grid.focus"] = true;
		dojo.provide("dojox.grid._grid.focus");
		dojo.declare("dojox.grid.focus", null, {constructor:function (inGrid) {
			this.grid = inGrid;
			this.cell = null;
			this.rowIndex = -1;
			dojo.connect(this.grid.domNode, "onfocus", this, "doFocus");
		}, tabbingOut:false, focusClass:"dojoxGrid-cell-focus", focusView:null, initFocusView:function () {
			this.focusView = this.grid.views.getFirstScrollingView();
		}, isFocusCell:function (inCell, inRowIndex) {
			return (this.cell == inCell) && (this.rowIndex == inRowIndex);
		}, isLastFocusCell:function () {
			return (this.rowIndex == this.grid.rowCount - 1) && (this.cell.index == this.grid.layout.cellCount - 1);
		}, isFirstFocusCell:function () {
			return (this.rowIndex == 0) && (this.cell.index == 0);
		}, isNoFocusCell:function () {
			return (this.rowIndex < 0) || !this.cell;
		}, _focusifyCellNode:function (inBork) {
			var n = this.cell && this.cell.getNode(this.rowIndex);
			if (n) {
				dojo.toggleClass(n, this.focusClass, inBork);
				if (inBork) {
					this.scrollIntoView();
					try {
						if (!this.grid.edit.isEditing()) {
							dojox.grid.fire(n, "focus");
						}
					}
					catch (e) {
					}
				}
			}
		}, scrollIntoView:function () {
			if (!this.cell) {
				return;
			}
			var c = this.cell, s = c.view.scrollboxNode, sr = {w:s.clientWidth, l:s.scrollLeft, t:s.scrollTop, h:s.clientHeight}, n = c.getNode(this.rowIndex), r = c.view.getRowNode(this.rowIndex), rt = this.grid.scroller.findScrollTop(this.rowIndex);
			if (n.offsetLeft + n.offsetWidth > sr.l + sr.w) {
				s.scrollLeft = n.offsetLeft + n.offsetWidth - sr.w;
			} else {
				if (n.offsetLeft < sr.l) {
					s.scrollLeft = n.offsetLeft;
				}
			}
			if (rt + r.offsetHeight > sr.t + sr.h) {
				this.grid.setScrollTop(rt + r.offsetHeight - sr.h);
			} else {
				if (rt < sr.t) {
					this.grid.setScrollTop(rt);
				}
			}
		}, styleRow:function (inRow) {
			return;
		}, setFocusIndex:function (inRowIndex, inCellIndex) {
			this.setFocusCell(this.grid.getCell(inCellIndex), inRowIndex);
		}, setFocusCell:function (inCell, inRowIndex) {
			if (inCell && !this.isFocusCell(inCell, inRowIndex)) {
				this.tabbingOut = false;
				this.focusGridView();
				this._focusifyCellNode(false);
				this.cell = inCell;
				this.rowIndex = inRowIndex;
				this._focusifyCellNode(true);
			}
			if (dojo.isOpera) {
				setTimeout(dojo.hitch(this.grid, "onCellFocus", this.cell, this.rowIndex), 1);
			} else {
				this.grid.onCellFocus(this.cell, this.rowIndex);
			}
		}, next:function () {
			var row = this.rowIndex, col = this.cell.index + 1, cc = this.grid.layout.cellCount - 1, rc = this.grid.rowCount - 1;
			if (col > cc) {
				col = 0;
				row++;
			}
			if (row > rc) {
				col = cc;
				row = rc;
			}
			this.setFocusIndex(row, col);
		}, previous:function () {
			var row = (this.rowIndex || 0), col = (this.cell.index || 0) - 1;
			if (col < 0) {
				col = this.grid.layout.cellCount - 1;
				row--;
			}
			if (row < 0) {
				row = 0;
				col = 0;
			}
			this.setFocusIndex(row, col);
		}, move:function (inRowDelta, inColDelta) {
			var rc = this.grid.rowCount - 1, cc = this.grid.layout.cellCount - 1, r = this.rowIndex, i = this.cell.index, row = Math.min(rc, Math.max(0, r + inRowDelta)), col = Math.min(cc, Math.max(0, i + inColDelta));
			this.setFocusIndex(row, col);
			if (inRowDelta) {
				this.grid.updateRow(r);
			}
		}, previousKey:function (e) {
			if (this.isFirstFocusCell()) {
				this.tabOut(this.grid.domNode);
			} else {
				dojo.stopEvent(e);
				this.previous();
			}
		}, nextKey:function (e) {
			if (this.isLastFocusCell()) {
				this.tabOut(this.grid.lastFocusNode);
			} else {
				dojo.stopEvent(e);
				this.next();
			}
		}, tabOut:function (inFocusNode) {
			this.tabbingOut = true;
			inFocusNode.focus();
		}, focusGridView:function () {
			dojox.grid.fire(this.focusView, "focus");
		}, focusGrid:function (inSkipFocusCell) {
			this.focusGridView();
			this._focusifyCellNode(true);
		}, doFocus:function (e) {
			if (e && e.target != e.currentTarget) {
				return;
			}
			if (!this.tabbingOut && this.isNoFocusCell()) {
				this.setFocusIndex(0, 0);
			}
			this.tabbingOut = false;
		}});
	}
	if (!dojo._hasResource["dojox.grid._grid.selection"]) {
		dojo._hasResource["dojox.grid._grid.selection"] = true;
		dojo.provide("dojox.grid._grid.selection");
		dojo.declare("dojox.grid.selection", null, {constructor:function (inGrid) {
			this.grid = inGrid;
			this.selected = [];
		}, multiSelect:true, selected:null, updating:0, selectedIndex:-1, onCanSelect:function (inIndex) {
			return this.grid.onCanSelect(inIndex);
		}, onCanDeselect:function (inIndex) {
			return this.grid.onCanDeselect(inIndex);
		}, onSelected:function (inIndex) {
			return this.grid.onSelected(inIndex);
		}, onDeselected:function (inIndex) {
			return this.grid.onDeselected(inIndex);
		}, onChanging:function () {
		}, onChanged:function () {
			return this.grid.onSelectionChanged();
		}, isSelected:function (inIndex) {
			return this.selected[inIndex];
		}, getFirstSelected:function () {
			for (var i = 0, l = this.selected.length; i < l; i++) {
				if (this.selected[i]) {
					return i;
				}
			}
			return -1;
		}, getNextSelected:function (inPrev) {
			for (var i = inPrev + 1, l = this.selected.length; i < l; i++) {
				if (this.selected[i]) {
					return i;
				}
			}
			return -1;
		}, getSelected:function () {
			var result = [];
			for (var i = 0, l = this.selected.length; i < l; i++) {
				if (this.selected[i]) {
					result.push(i);
				}
			}
			return result;
		}, getSelectedCount:function () {
			var c = 0;
			for (var i = 0; i < this.selected.length; i++) {
				if (this.selected[i]) {
					c++;
				}
			}
			return c;
		}, beginUpdate:function () {
			if (this.updating == 0) {
				this.onChanging();
			}
			this.updating++;
		}, endUpdate:function () {
			this.updating--;
			if (this.updating == 0) {
				this.onChanged();
			}
		}, select:function (inIndex) {
			this.unselectAll(inIndex);
			this.addToSelection(inIndex);
		}, addToSelection:function (inIndex) {
			inIndex = Number(inIndex);
			if (this.selected[inIndex]) {
				this.selectedIndex = inIndex;
			} else {
				if (this.onCanSelect(inIndex) !== false) {
					this.selectedIndex = inIndex;
					this.beginUpdate();
					this.selected[inIndex] = true;
					this.grid.onSelected(inIndex);
					this.endUpdate();
				}
			}
		}, deselect:function (inIndex) {
			inIndex = Number(inIndex);
			if (this.selectedIndex == inIndex) {
				this.selectedIndex = -1;
			}
			if (this.selected[inIndex]) {
				if (this.onCanDeselect(inIndex) === false) {
					return;
				}
				this.beginUpdate();
				delete this.selected[inIndex];
				this.grid.onDeselected(inIndex);
				this.endUpdate();
			}
		}, setSelected:function (inIndex, inSelect) {
			this[(inSelect ? "addToSelection" : "deselect")](inIndex);
		}, toggleSelect:function (inIndex) {
			this.setSelected(inIndex, !this.selected[inIndex]);
		}, insert:function (inIndex) {
			this.selected.splice(inIndex, 0, false);
			if (this.selectedIndex >= inIndex) {
				this.selectedIndex++;
			}
		}, remove:function (inIndex) {
			this.selected.splice(inIndex, 1);
			if (this.selectedIndex >= inIndex) {
				this.selectedIndex--;
			}
		}, unselectAll:function (inExcept) {
			for (var i in this.selected) {
				if ((i != inExcept) && (this.selected[i] === true)) {
					this.deselect(i);
				}
			}
		}, shiftSelect:function (inFrom, inTo) {
			var s = (inFrom >= 0 ? inFrom : inTo), e = inTo;
			if (s > e) {
				e = s;
				s = inTo;
			}
			for (var i = s; i <= e; i++) {
				this.addToSelection(i);
			}
		}, clickSelect:function (inIndex, inCtrlKey, inShiftKey) {
			this.beginUpdate();
			if (!this.multiSelect) {
				this.select(inIndex);
			} else {
				var lastSelected = this.selectedIndex;
				if (!inCtrlKey) {
					this.unselectAll(inIndex);
				}
				if (inShiftKey) {
					this.shiftSelect(lastSelected, inIndex);
				} else {
					if (inCtrlKey) {
						this.toggleSelect(inIndex);
					} else {
						this.addToSelection(inIndex);
					}
				}
			}
			this.endUpdate();
		}, clickSelectEvent:function (e) {
			this.clickSelect(e.rowIndex, e.ctrlKey, e.shiftKey);
		}, clear:function () {
			this.beginUpdate();
			this.unselectAll();
			this.endUpdate();
		}});
	}
	if (!dojo._hasResource["dojox.grid._grid.edit"]) {
		dojo._hasResource["dojox.grid._grid.edit"] = true;
		dojo.provide("dojox.grid._grid.edit");
		dojo.declare("dojox.grid.edit", null, {constructor:function (inGrid) {
			this.grid = inGrid;
			this.connections = [];
			if (dojo.isIE) {
				this.connections.push(dojo.connect(document.body, "onfocus", dojo.hitch(this, "_boomerangFocus")));
			}
		}, info:{}, destroy:function () {
			dojo.forEach(this.connections, dojo.disconnect);
		}, cellFocus:function (inCell, inRowIndex) {
			if (this.grid.singleClickEdit || this.isEditRow(inRowIndex)) {
				this.setEditCell(inCell, inRowIndex);
			} else {
				this.apply();
			}
			if (this.isEditing() || (inCell && (inCell.editor || 0).alwaysOn)) {
				this._focusEditor(inCell, inRowIndex);
			}
		}, rowClick:function (e) {
			if (this.isEditing() && !this.isEditRow(e.rowIndex)) {
				this.apply();
			}
		}, styleRow:function (inRow) {
			if (inRow.index == this.info.rowIndex) {
				inRow.customClasses += " dojoxGrid-row-editing";
			}
		}, dispatchEvent:function (e) {
			var c = e.cell, ed = c && c.editor;
			return ed && ed.dispatchEvent(e.dispatch, e);
		}, isEditing:function () {
			return this.info.rowIndex !== undefined;
		}, isEditCell:function (inRowIndex, inCellIndex) {
			return (this.info.rowIndex === inRowIndex) && (this.info.cell.index == inCellIndex);
		}, isEditRow:function (inRowIndex) {
			return this.info.rowIndex === inRowIndex;
		}, setEditCell:function (inCell, inRowIndex) {
			if (!this.isEditCell(inRowIndex, inCell.index) && this.grid.canEdit(inCell, inRowIndex)) {
				this.start(inCell, inRowIndex, this.isEditRow(inRowIndex) || inCell.editor);
			}
		}, _focusEditor:function (inCell, inRowIndex) {
			dojox.grid.fire(inCell.editor, "focus", [inRowIndex]);
		}, focusEditor:function () {
			if (this.isEditing()) {
				this._focusEditor(this.info.cell, this.info.rowIndex);
			}
		}, _boomerangWindow:500, _shouldCatchBoomerang:function () {
			return this._catchBoomerang > new Date().getTime();
		}, _boomerangFocus:function () {
			if (this._shouldCatchBoomerang()) {
				this.grid.focus.focusGrid();
				this.focusEditor();
				this._catchBoomerang = 0;
			}
		}, _doCatchBoomerang:function () {
			if (dojo.isIE) {
				this._catchBoomerang = new Date().getTime() + this._boomerangWindow;
			}
		}, start:function (inCell, inRowIndex, inEditing) {
			this.grid.beginUpdate();
			this.editorApply();
			if (this.isEditing() && !this.isEditRow(inRowIndex)) {
				this.applyRowEdit();
				this.grid.updateRow(inRowIndex);
			}
			if (inEditing) {
				this.info = {cell:inCell, rowIndex:inRowIndex};
				this.grid.doStartEdit(inCell, inRowIndex);
				this.grid.updateRow(inRowIndex);
			} else {
				this.info = {};
			}
			this.grid.endUpdate();
			this.grid.focus.focusGrid();
			this._focusEditor(inCell, inRowIndex);
			this._doCatchBoomerang();
		}, _editorDo:function (inMethod) {
			var c = this.info.cell;
			c && c.editor && c.editor[inMethod](this.info.rowIndex);
		}, editorApply:function () {
			this._editorDo("apply");
		}, editorCancel:function () {
			this._editorDo("cancel");
		}, applyCellEdit:function (inValue, inCell, inRowIndex) {
			if (this.grid.canEdit(inCell, inRowIndex)) {
				this.grid.doApplyCellEdit(inValue, inRowIndex, inCell.fieldIndex);
			}
		}, applyRowEdit:function () {
			this.grid.doApplyEdit(this.info.rowIndex);
		}, apply:function () {
			if (this.isEditing()) {
				this.grid.beginUpdate();
				this.editorApply();
				this.applyRowEdit();
				this.info = {};
				this.grid.endUpdate();
				this.grid.focus.focusGrid();
				this._doCatchBoomerang();
			}
		}, cancel:function () {
			if (this.isEditing()) {
				this.grid.beginUpdate();
				this.editorCancel();
				this.info = {};
				this.grid.endUpdate();
				this.grid.focus.focusGrid();
				this._doCatchBoomerang();
			}
		}, save:function (inRowIndex, inView) {
			var c = this.info.cell;
			if (this.isEditRow(inRowIndex) && (!inView || c.view == inView) && c.editor) {
				c.editor.save(c, this.info.rowIndex);
			}
		}, restore:function (inView, inRowIndex) {
			var c = this.info.cell;
			if (this.isEditRow(inRowIndex) && c.view == inView && c.editor) {
				c.editor.restore(c, this.info.rowIndex);
			}
		}});
	}
	if (!dojo._hasResource["dojox.grid._grid.rowbar"]) {
		dojo._hasResource["dojox.grid._grid.rowbar"] = true;
		dojo.provide("dojox.grid._grid.rowbar");
		dojo.declare("dojox.GridRowView", dojox.GridView, {defaultWidth:"3em", noscroll:true, padBorderWidth:2, buildRendering:function () {
			this.inherited("buildRendering", arguments);
			this.scrollboxNode.style.overflow = "hidden";
			this.headerNode.style.visibility = "hidden";
		}, getWidth:function () {
			return this.viewWidth || this.defaultWidth;
		}, buildRowContent:function (inRowIndex, inRowNode) {
			var w = this.contentNode.offsetWidth - this.padBorderWidth;
			inRowNode.innerHTML = "<table style=\"width:" + w + "px;\" role=\"wairole:presentation\"><tr><td class=\"dojoxGrid-rowbar-inner\"></td></tr></table>";
		}, renderHeader:function () {
		}, resize:function () {
			this.adaptHeight();
		}, adaptWidth:function () {
		}, doStyleRowNode:function (inRowIndex, inRowNode) {
			var n = ["dojoxGrid-rowbar"];
			if (this.grid.rows.isOver(inRowIndex)) {
				n.push("dojoxGrid-rowbar-over");
			}
			if (this.grid.selection.isSelected(inRowIndex)) {
				n.push("dojoxGrid-rowbar-selected");
			}
			inRowNode.className = n.join(" ");
		}, domouseover:function (e) {
			this.grid.onMouseOverRow(e);
		}, domouseout:function (e) {
			if (!this.isIntraRowEvent(e)) {
				this.grid.onMouseOutRow(e);
			}
		}});
	}
	if (!dojo._hasResource["dojox.grid._grid.publicEvents"]) {
		dojo._hasResource["dojox.grid._grid.publicEvents"] = true;
		dojo.provide("dojox.grid._grid.publicEvents");
		dojox.grid.publicEvents = {cellOverClass:"dojoxGrid-cell-over", onKeyEvent:function (e) {
			this.dispatchKeyEvent(e);
		}, onContentEvent:function (e) {
			this.dispatchContentEvent(e);
		}, onHeaderEvent:function (e) {
			this.dispatchHeaderEvent(e);
		}, onStyleRow:function (inRow) {
			with (inRow) {
				customClasses += (odd ? " dojoxGrid-row-odd" : "") + (selected ? " dojoxGrid-row-selected" : "") + (over ? " dojoxGrid-row-over" : "");
			}
			this.focus.styleRow(inRow);
			this.edit.styleRow(inRow);
		}, onKeyDown:function (e) {
			if (e.altKey || e.ctrlKey || e.metaKey) {
				return;
			}
			var dk = dojo.keys;
			switch (e.keyCode) {
			  case dk.ESCAPE:
				this.edit.cancel();
				break;
			  case dk.ENTER:
				if (!e.shiftKey) {
					var isEditing = this.edit.isEditing();
					this.edit.apply();
					if (!isEditing) {
						this.edit.setEditCell(this.focus.cell, this.focus.rowIndex);
					}
				}
				break;
			  case dk.TAB:
				this.focus[e.shiftKey ? "previousKey" : "nextKey"](e);
				break;
			  case dk.LEFT_ARROW:
			  case dk.RIGHT_ARROW:
				if (!this.edit.isEditing()) {
					dojo.stopEvent(e);
					var offset = (e.keyCode == dk.LEFT_ARROW) ? 1 : -1;
					if (dojo._isBodyLtr()) {
						offset *= -1;
					}
					this.focus.move(0, offset);
				}
				break;
			  case dk.UP_ARROW:
				if (!this.edit.isEditing() && this.focus.rowIndex != 0) {
					dojo.stopEvent(e);
					this.focus.move(-1, 0);
				}
				break;
			  case dk.DOWN_ARROW:
				if (!this.edit.isEditing() && this.focus.rowIndex + 1 != this.model.count) {
					dojo.stopEvent(e);
					this.focus.move(1, 0);
				}
				break;
			  case dk.PAGE_UP:
				if (!this.edit.isEditing() && this.focus.rowIndex != 0) {
					dojo.stopEvent(e);
					if (this.focus.rowIndex != this.scroller.firstVisibleRow + 1) {
						this.focus.move(this.scroller.firstVisibleRow - this.focus.rowIndex, 0);
					} else {
						this.setScrollTop(this.scroller.findScrollTop(this.focus.rowIndex - 1));
						this.focus.move(this.scroller.firstVisibleRow - this.scroller.lastVisibleRow + 1, 0);
					}
				}
				break;
			  case dk.PAGE_DOWN:
				if (!this.edit.isEditing() && this.focus.rowIndex + 1 != this.model.count) {
					dojo.stopEvent(e);
					if (this.focus.rowIndex != this.scroller.lastVisibleRow - 1) {
						this.focus.move(this.scroller.lastVisibleRow - this.focus.rowIndex - 1, 0);
					} else {
						this.setScrollTop(this.scroller.findScrollTop(this.focus.rowIndex + 1));
						this.focus.move(this.scroller.lastVisibleRow - this.scroller.firstVisibleRow - 1, 0);
					}
				}
				break;
			}
		}, onMouseOver:function (e) {
			e.rowIndex == -1 ? this.onHeaderCellMouseOver(e) : this.onCellMouseOver(e);
		}, onMouseOut:function (e) {
			e.rowIndex == -1 ? this.onHeaderCellMouseOut(e) : this.onCellMouseOut(e);
		}, onMouseDown:function (e) {
			e.rowIndex == -1 ? this.onHeaderCellMouseDown(e) : this.onCellMouseDown(e);
		}, onMouseOverRow:function (e) {
			if (!this.rows.isOver(e.rowIndex)) {
				this.rows.setOverRow(e.rowIndex);
				e.rowIndex == -1 ? this.onHeaderMouseOver(e) : this.onRowMouseOver(e);
			}
		}, onMouseOutRow:function (e) {
			if (this.rows.isOver(-1)) {
				this.onHeaderMouseOut(e);
			} else {
				if (!this.rows.isOver(-2)) {
					this.rows.setOverRow(-2);
					this.onRowMouseOut(e);
				}
			}
		}, onMouseDownRow:function (e) {
			if (e.rowIndex != -1) {
				this.onRowMouseDown(e);
			}
		}, onCellMouseOver:function (e) {
			dojo.addClass(e.cellNode, this.cellOverClass);
		}, onCellMouseOut:function (e) {
			dojo.removeClass(e.cellNode, this.cellOverClass);
		}, onCellMouseDown:function (e) {
		}, onCellClick:function (e) {
			this._click[0] = this._click[1];
			this._click[1] = e;
			if (!this.edit.isEditCell(e.rowIndex, e.cellIndex)) {
				this.focus.setFocusCell(e.cell, e.rowIndex);
			}
			this.onRowClick(e);
		}, onCellDblClick:function (e) {
			if (dojo.isIE) {
				this.edit.setEditCell(this._click[1].cell, this._click[1].rowIndex);
			} else {
				if (this._click[0].rowIndex != this._click[1].rowIndex) {
					this.edit.setEditCell(this._click[0].cell, this._click[0].rowIndex);
				} else {
					this.edit.setEditCell(e.cell, e.rowIndex);
				}
			}
			this.onRowDblClick(e);
		}, onCellContextMenu:function (e) {
			this.onRowContextMenu(e);
		}, onCellFocus:function (inCell, inRowIndex) {
			this.edit.cellFocus(inCell, inRowIndex);
		}, onRowClick:function (e) {
			this.edit.rowClick(e);
			this.selection.clickSelectEvent(e);
		}, onRowDblClick:function (e) {
		}, onRowMouseOver:function (e) {
		}, onRowMouseOut:function (e) {
		}, onRowMouseDown:function (e) {
		}, onRowContextMenu:function (e) {
			dojo.stopEvent(e);
		}, onHeaderMouseOver:function (e) {
		}, onHeaderMouseOut:function (e) {
		}, onHeaderCellMouseOver:function (e) {
			dojo.addClass(e.cellNode, this.cellOverClass);
		}, onHeaderCellMouseOut:function (e) {
			dojo.removeClass(e.cellNode, this.cellOverClass);
		}, onHeaderCellMouseDown:function (e) {
		}, onHeaderClick:function (e) {
		}, onHeaderCellClick:function (e) {
			this.setSortIndex(e.cell.index);
			this.onHeaderClick(e);
		}, onHeaderDblClick:function (e) {
		}, onHeaderCellDblClick:function (e) {
			this.onHeaderDblClick(e);
		}, onHeaderCellContextMenu:function (e) {
			this.onHeaderContextMenu(e);
		}, onHeaderContextMenu:function (e) {
			dojo.stopEvent(e);
		}, onStartEdit:function (inCell, inRowIndex) {
		}, onApplyCellEdit:function (inValue, inRowIndex, inFieldIndex) {
		}, onCancelEdit:function (inRowIndex) {
		}, onApplyEdit:function (inRowIndex) {
		}, onCanSelect:function (inRowIndex) {
			return true;
		}, onCanDeselect:function (inRowIndex) {
			return true;
		}, onSelected:function (inRowIndex) {
			this.updateRowStyles(inRowIndex);
		}, onDeselected:function (inRowIndex) {
			this.updateRowStyles(inRowIndex);
		}, onSelectionChanged:function () {
		}};
	}
	if (!dojo._hasResource["dojox.grid.VirtualGrid"]) {
		dojo._hasResource["dojox.grid.VirtualGrid"] = true;
		dojo.provide("dojox.grid.VirtualGrid");
		dojo.declare("dojox.VirtualGrid", [dijit._Widget, dijit._Templated], {templateString:"<div class=\"dojoxGrid\" hidefocus=\"hidefocus\" role=\"wairole:grid\">\n\t<div class=\"dojoxGrid-master-header\" dojoAttachPoint=\"viewsHeaderNode\"></div>\n\t<div class=\"dojoxGrid-master-view\" dojoAttachPoint=\"viewsNode\"></div>\n\t<span dojoAttachPoint=\"lastFocusNode\" tabindex=\"0\"></span>\n</div>\n", classTag:"dojoxGrid", get:function (inRowIndex) {
		}, rowCount:5, keepRows:75, rowsPerPage:25, autoWidth:false, autoHeight:false, autoRender:true, defaultHeight:"15em", structure:"", elasticView:-1, singleClickEdit:false, _click:null, sortInfo:0, themeable:true, buildRendering:function () {
			this.inherited(arguments);
			if (this.get == dojox.VirtualGrid.prototype.get) {
				this.get = null;
			}
			if (!this.domNode.getAttribute("tabIndex")) {
				this.domNode.tabIndex = "0";
			}
			this.createScroller();
			this.createLayout();
			this.createViews();
			this.createManagers();
			dojox.grid.initTextSizePoll();
			this.connect(dojox.grid, "textSizeChanged", "textSizeChanged");
			dojox.grid.funnelEvents(this.domNode, this, "doKeyEvent", dojox.grid.keyEvents);
			this.connect(this, "onShow", "renderOnIdle");
		}, postCreate:function () {
			this.styleChanged = this._styleChanged;
			this.setStructure(this.structure);
			this._click = [];
		}, destroy:function () {
			this.domNode.onReveal = null;
			this.domNode.onSizeChange = null;
			this.edit.destroy();
			this.views.destroyViews();
			this.inherited(arguments);
		}, styleChanged:function () {
			this.setStyledClass(this.domNode, "");
		}, _styleChanged:function () {
			this.styleChanged();
			this.update();
		}, textSizeChanged:function () {
			setTimeout(dojo.hitch(this, "_textSizeChanged"), 1);
		}, _textSizeChanged:function () {
			if (this.domNode) {
				this.views.forEach(function (v) {
					v.content.update();
				});
				this.render();
			}
		}, sizeChange:function () {
			dojox.grid.jobs.job(this.id + "SizeChange", 50, dojo.hitch(this, "update"));
		}, renderOnIdle:function () {
			setTimeout(dojo.hitch(this, "render"), 1);
		}, createManagers:function () {
			this.rows = new dojox.grid.rows(this);
			this.focus = new dojox.grid.focus(this);
			this.selection = new dojox.grid.selection(this);
			this.edit = new dojox.grid.edit(this);
		}, createScroller:function () {
			this.scroller = new dojox.grid.scroller.columns();
			this.scroller._pageIdPrefix = this.id + "-";
			this.scroller.renderRow = dojo.hitch(this, "renderRow");
			this.scroller.removeRow = dojo.hitch(this, "rowRemoved");
		}, createLayout:function () {
			this.layout = new dojox.grid.layout(this);
		}, createViews:function () {
			this.views = new dojox.grid.views(this);
			this.views.createView = dojo.hitch(this, "createView");
		}, createView:function (inClass) {
			if (dojo.isAIR) {
				var obj = window;
				var names = inClass.split(".");
				for (var i = 0; i < names.length; i++) {
					if (typeof obj[names[i]] == "undefined") {
						var undefstring = names[0];
						for (var j = 1; j <= i; j++) {
							undefstring += "." + names[j];
						}
						throw new Error(undefstring + " is undefined");
					}
					obj = obj[names[i]];
				}
				var c = obj;
			} else {
				var c = eval(inClass);
			}
			var view = new c({grid:this});
			this.viewsNode.appendChild(view.domNode);
			this.viewsHeaderNode.appendChild(view.headerNode);
			this.views.addView(view);
			return view;
		}, buildViews:function () {
			for (var i = 0, vs; (vs = this.layout.structure[i]); i++) {
				this.createView(vs.type || dojox._scopeName + ".GridView").setStructure(vs);
			}
			this.scroller.setContentNodes(this.views.getContentNodes());
		}, setStructure:function (inStructure) {
			this.views.destroyViews();
			this.structure = inStructure;
			if ((this.structure) && (dojo.isString(this.structure))) {
				this.structure = dojox.grid.getProp(this.structure);
			}
			if (!this.structure) {
				this.structure = window["layout"];
			}
			if (!this.structure) {
				return;
			}
			this.layout.setStructure(this.structure);
			this._structureChanged();
		}, _structureChanged:function () {
			this.buildViews();
			if (this.autoRender) {
				this.render();
			}
		}, hasLayout:function () {
			return this.layout.cells.length;
		}, resize:function (sizeBox) {
			this._sizeBox = sizeBox;
			this._resize();
			this.sizeChange();
		}, _getPadBorder:function () {
			this._padBorder = this._padBorder || dojo._getPadBorderExtents(this.domNode);
			return this._padBorder;
		}, _resize:function () {
			if (!this.domNode.parentNode || this.domNode.parentNode.nodeType != 1 || !this.hasLayout()) {
				return;
			}
			var padBorder = this._getPadBorder();
			if (this.autoHeight) {
				this.domNode.style.height = "auto";
				this.viewsNode.style.height = "";
			} else {
				if (this.flex > 0) {
				} else {
					if (this.domNode.clientHeight <= padBorder.h) {
						if (this.domNode.parentNode == document.body) {
							this.domNode.style.height = this.defaultHeight;
						} else {
							this.fitTo = "parent";
						}
					}
				}
			}
			if (this._sizeBox) {
				dojo.contentBox(this.domNode, this._sizeBox);
			} else {
				if (this.fitTo == "parent") {
					var h = dojo._getContentBox(this.domNode.parentNode).h;
					dojo.marginBox(this.domNode, {h:Math.max(0, h)});
				}
			}
			var h = dojo._getContentBox(this.domNode).h;
			if (h == 0 && !this.autoHeight) {
				this.viewsHeaderNode.style.display = "none";
			} else {
				this.viewsHeaderNode.style.display = "block";
			}
			this.adaptWidth();
			this.adaptHeight();
			this.scroller.defaultRowHeight = this.rows.getDefaultHeightPx() + 1;
			this.postresize();
		}, adaptWidth:function () {
			var w = this.autoWidth ? 0 : this.domNode.clientWidth || (this.domNode.offsetWidth - this._getPadBorder().w);
			vw = this.views.arrange(1, w);
			this.views.onEach("adaptWidth");
			if (this.autoWidth) {
				this.domNode.style.width = vw + "px";
			}
		}, adaptHeight:function () {
			var vns = this.viewsHeaderNode.style, t = vns.display == "none" ? 0 : this.views.measureHeader();
			vns.height = t + "px";
			this.views.normalizeHeaderNodeHeight();
			var h = (this.autoHeight ? -1 : Math.max(this.domNode.clientHeight - t, 0) || 0);
			this.views.onEach("setSize", [0, h]);
			this.views.onEach("adaptHeight");
			this.scroller.windowHeight = h;
		}, render:function () {
			if (!this.domNode) {
				return;
			}
			if (!this.hasLayout()) {
				this.scroller.init(0, this.keepRows, this.rowsPerPage);
				return;
			}
			this.update = this.defaultUpdate;
			this.scroller.init(this.rowCount, this.keepRows, this.rowsPerPage);
			this.prerender();
			this.setScrollTop(0);
			this.postrender();
		}, prerender:function () {
			this.keepRows = this.autoHeight ? 0 : this.constructor.prototype.keepRows;
			this.scroller.setKeepInfo(this.keepRows);
			this.views.render();
			this._resize();
		}, postrender:function () {
			this.postresize();
			this.focus.initFocusView();
			dojo.setSelectable(this.domNode, false);
		}, postresize:function () {
			if (this.autoHeight) {
				this.viewsNode.style.height = this.views.measureContent() + "px";
			}
		}, renderRow:function (inRowIndex, inNodes) {
			this.views.renderRow(inRowIndex, inNodes);
		}, rowRemoved:function (inRowIndex) {
			this.views.rowRemoved(inRowIndex);
		}, invalidated:null, updating:false, beginUpdate:function () {
			this.invalidated = [];
			this.updating = true;
		}, endUpdate:function () {
			this.updating = false;
			var i = this.invalidated;
			if (i.all) {
				this.update();
			} else {
				if (i.rowCount != undefined) {
					this.updateRowCount(i.rowCount);
				} else {
					for (r in i) {
						this.updateRow(Number(r));
					}
				}
			}
			this.invalidated = null;
		}, defaultUpdate:function () {
			if (!this.domNode) {
				return;
			}
			if (this.updating) {
				this.invalidated.all = true;
				return;
			}
			this.prerender();
			this.scroller.invalidateNodes();
			this.setScrollTop(this.scrollTop);
			this.postrender();
		}, update:function () {
			this.render();
		}, updateRow:function (inRowIndex) {
			inRowIndex = Number(inRowIndex);
			if (this.updating) {
				this.invalidated[inRowIndex] = true;
			} else {
				this.views.updateRow(inRowIndex, this.rows.getHeight(inRowIndex));
				this.scroller.rowHeightChanged(inRowIndex);
			}
		}, updateRowCount:function (inRowCount) {
			if (this.updating) {
				this.invalidated.rowCount = inRowCount;
			} else {
				this.rowCount = inRowCount;
				if (this.layout.cells.length) {
					this.scroller.updateRowCount(inRowCount);
					this.setScrollTop(this.scrollTop);
				}
				this._resize();
			}
		}, updateRowStyles:function (inRowIndex) {
			this.views.updateRowStyles(inRowIndex);
		}, rowHeightChanged:function (inRowIndex) {
			this.views.renormalizeRow(inRowIndex);
			this.scroller.rowHeightChanged(inRowIndex);
		}, fastScroll:true, delayScroll:false, scrollRedrawThreshold:(dojo.isIE ? 100 : 50), scrollTo:function (inTop) {
			if (!this.fastScroll) {
				this.setScrollTop(inTop);
				return;
			}
			var delta = Math.abs(this.lastScrollTop - inTop);
			this.lastScrollTop = inTop;
			if (delta > this.scrollRedrawThreshold || this.delayScroll) {
				this.delayScroll = true;
				this.scrollTop = inTop;
				this.views.setScrollTop(inTop);
				dojox.grid.jobs.job("dojoxGrid-scroll", 200, dojo.hitch(this, "finishScrollJob"));
			} else {
				this.setScrollTop(inTop);
			}
		}, finishScrollJob:function () {
			this.delayScroll = false;
			this.setScrollTop(this.scrollTop);
		}, setScrollTop:function (inTop) {
			this.scrollTop = this.views.setScrollTop(inTop);
			this.scroller.scroll(this.scrollTop);
		}, scrollToRow:function (inRowIndex) {
			this.setScrollTop(this.scroller.findScrollTop(inRowIndex) + 1);
		}, styleRowNode:function (inRowIndex, inRowNode) {
			if (inRowNode) {
				this.rows.styleRowNode(inRowIndex, inRowNode);
			}
		}, getCell:function (inIndex) {
			return this.layout.cells[inIndex];
		}, setCellWidth:function (inIndex, inUnitWidth) {
			this.getCell(inIndex).unitWidth = inUnitWidth;
		}, getCellName:function (inCell) {
			return "Cell " + inCell.index;
		}, canSort:function (inSortInfo) {
		}, sort:function () {
		}, getSortAsc:function (inSortInfo) {
			inSortInfo = inSortInfo == undefined ? this.sortInfo : inSortInfo;
			return Boolean(inSortInfo > 0);
		}, getSortIndex:function (inSortInfo) {
			inSortInfo = inSortInfo == undefined ? this.sortInfo : inSortInfo;
			return Math.abs(inSortInfo) - 1;
		}, setSortIndex:function (inIndex, inAsc) {
			var si = inIndex + 1;
			if (inAsc != undefined) {
				si *= (inAsc ? 1 : -1);
			} else {
				if (this.getSortIndex() == inIndex) {
					si = -this.sortInfo;
				}
			}
			this.setSortInfo(si);
		}, setSortInfo:function (inSortInfo) {
			if (this.canSort(inSortInfo)) {
				this.sortInfo = inSortInfo;
				this.sort();
				this.update();
			}
		}, doKeyEvent:function (e) {
			e.dispatch = "do" + e.type;
			this.onKeyEvent(e);
		}, _dispatch:function (m, e) {
			if (m in this) {
				return this[m](e);
			}
		}, dispatchKeyEvent:function (e) {
			this._dispatch(e.dispatch, e);
		}, dispatchContentEvent:function (e) {
			this.edit.dispatchEvent(e) || e.sourceView.dispatchContentEvent(e) || this._dispatch(e.dispatch, e);
		}, dispatchHeaderEvent:function (e) {
			e.sourceView.dispatchHeaderEvent(e) || this._dispatch("doheader" + e.type, e);
		}, dokeydown:function (e) {
			this.onKeyDown(e);
		}, doclick:function (e) {
			if (e.cellNode) {
				this.onCellClick(e);
			} else {
				this.onRowClick(e);
			}
		}, dodblclick:function (e) {
			if (e.cellNode) {
				this.onCellDblClick(e);
			} else {
				this.onRowDblClick(e);
			}
		}, docontextmenu:function (e) {
			if (e.cellNode) {
				this.onCellContextMenu(e);
			} else {
				this.onRowContextMenu(e);
			}
		}, doheaderclick:function (e) {
			if (e.cellNode) {
				this.onHeaderCellClick(e);
			} else {
				this.onHeaderClick(e);
			}
		}, doheaderdblclick:function (e) {
			if (e.cellNode) {
				this.onHeaderCellDblClick(e);
			} else {
				this.onHeaderDblClick(e);
			}
		}, doheadercontextmenu:function (e) {
			if (e.cellNode) {
				this.onHeaderCellContextMenu(e);
			} else {
				this.onHeaderContextMenu(e);
			}
		}, doStartEdit:function (inCell, inRowIndex) {
			this.onStartEdit(inCell, inRowIndex);
		}, doApplyCellEdit:function (inValue, inRowIndex, inFieldIndex) {
			this.onApplyCellEdit(inValue, inRowIndex, inFieldIndex);
		}, doCancelEdit:function (inRowIndex) {
			this.onCancelEdit(inRowIndex);
		}, doApplyEdit:function (inRowIndex) {
			this.onApplyEdit(inRowIndex);
		}, addRow:function () {
			this.updateRowCount(this.rowCount + 1);
		}, removeSelectedRows:function () {
			this.updateRowCount(Math.max(0, this.rowCount - this.selection.getSelected().length));
			this.selection.clear();
		}});
		dojo.mixin(dojox.VirtualGrid.prototype, dojox.grid.publicEvents);
	}
	if (!dojo._hasResource["dojox.grid._data.fields"]) {
		dojo._hasResource["dojox.grid._data.fields"] = true;
		dojo.provide("dojox.grid._data.fields");
		dojo.declare("dojox.grid.data.Mixer", null, {constructor:function () {
			this.defaultValue = {};
			this.values = [];
		}, count:function () {
			return this.values.length;
		}, clear:function () {
			this.values = [];
		}, build:function (inIndex) {
			var result = dojo.mixin({owner:this}, this.defaultValue);
			result.key = inIndex;
			this.values[inIndex] = result;
			return result;
		}, getDefault:function () {
			return this.defaultValue;
		}, setDefault:function (inField) {
			for (var i = 0, a; (a = arguments[i]); i++) {
				dojo.mixin(this.defaultValue, a);
			}
		}, get:function (inIndex) {
			return this.values[inIndex] || this.build(inIndex);
		}, _set:function (inIndex, inField) {
			var v = this.get(inIndex);
			for (var i = 1; i < arguments.length; i++) {
				dojo.mixin(v, arguments[i]);
			}
			this.values[inIndex] = v;
		}, set:function () {
			if (arguments.length < 1) {
				return;
			}
			var a = arguments[0];
			if (!dojo.isArray(a)) {
				this._set.apply(this, arguments);
			} else {
				if (a.length && a[0]["default"]) {
					this.setDefault(a.shift());
				}
				for (var i = 0, l = a.length; i < l; i++) {
					this._set(i, a[i]);
				}
			}
		}, insert:function (inIndex, inProps) {
			if (inIndex >= this.values.length) {
				this.values[inIndex] = inProps;
			} else {
				this.values.splice(inIndex, 0, inProps);
			}
		}, remove:function (inIndex) {
			this.values.splice(inIndex, 1);
		}, swap:function (inIndexA, inIndexB) {
			dojox.grid.arraySwap(this.values, inIndexA, inIndexB);
		}, move:function (inFromIndex, inToIndex) {
			dojox.grid.arrayMove(this.values, inFromIndex, inToIndex);
		}});
		dojox.grid.data.compare = function (a, b) {
			return (a > b ? 1 : (a == b ? 0 : -1));
		};
		dojo.declare("dojox.grid.data.Field", null, {constructor:function (inName) {
			this.name = inName;
			this.compare = dojox.grid.data.compare;
		}, na:dojox.grid.na});
		dojo.declare("dojox.grid.data.Fields", dojox.grid.data.Mixer, {constructor:function (inFieldClass) {
			var fieldClass = inFieldClass ? inFieldClass : dojox.grid.data.Field;
			this.defaultValue = new fieldClass();
		}, indexOf:function (inKey) {
			for (var i = 0; i < this.values.length; i++) {
				var v = this.values[i];
				if (v && v.key == inKey) {
					return i;
				}
			}
			return -1;
		}});
	}
	if (!dojo._hasResource["dojox.grid._data.model"]) {
		dojo._hasResource["dojox.grid._data.model"] = true;
		dojo.provide("dojox.grid._data.model");
		dojo.declare("dojox.grid.data.Model", null, {constructor:function (inFields, inData) {
			this.observers = [];
			this.fields = new dojox.grid.data.Fields();
			if (inFields) {
				this.fields.set(inFields);
			}
			this.setData(inData);
		}, count:0, updating:0, observer:function (inObserver, inPrefix) {
			this.observers.push({o:inObserver, p:inPrefix || "model"});
		}, notObserver:function (inObserver) {
			for (var i = 0, m, o; (o = this.observers[i]); i++) {
				if (o.o == inObserver) {
					this.observers.splice(i, 1);
					return;
				}
			}
		}, notify:function (inMsg, inArgs) {
			if (!this.isUpdating()) {
				var a = inArgs || [];
				for (var i = 0, m, o; (o = this.observers[i]); i++) {
					m = o.p + inMsg;
					o = o.o;
					(m in o) && (o[m].apply(o, a));
				}
			}
		}, clear:function () {
			this.fields.clear();
			this.clearData();
		}, beginUpdate:function () {
			this.updating++;
		}, endUpdate:function () {
			if (this.updating) {
				this.updating--;
			}
		}, isUpdating:function () {
			return Boolean(this.updating);
		}, clearData:function () {
			this.setData(null);
		}, change:function () {
			this.notify("Change", arguments);
		}, insertion:function () {
			this.notify("Insertion", arguments);
			this.notify("Change", arguments);
		}, removal:function () {
			this.notify("Removal", arguments);
			this.notify("Change", arguments);
		}, insert:function (inData) {
			if (!this._insert.apply(this, arguments)) {
				return false;
			}
			this.insertion.apply(this, dojo._toArray(arguments, 1));
			return true;
		}, remove:function (inData) {
			if (!this._remove.apply(this, arguments)) {
				return false;
			}
			this.removal.apply(this, arguments);
			return true;
		}, canSort:function () {
			return this.sort != null;
		}, generateComparator:function (inCompare, inField, inTrueForAscend, inSubCompare) {
			return function (a, b) {
				var ineq = inCompare(a[inField], b[inField]);
				return ineq ? (inTrueForAscend ? ineq : -ineq) : inSubCompare && inSubCompare(a, b);
			};
		}, makeComparator:function (inIndices) {
			var idx, col, field, result = null;
			for (var i = inIndices.length - 1; i >= 0; i--) {
				idx = inIndices[i];
				col = Math.abs(idx) - 1;
				if (col >= 0) {
					field = this.fields.get(col);
					result = this.generateComparator(field.compare, field.key, idx > 0, result);
				}
			}
			return result;
		}, sort:null, dummy:0});
		dojo.declare("dojox.grid.data.Rows", dojox.grid.data.Model, {allChange:function () {
			this.notify("AllChange", arguments);
			this.notify("Change", arguments);
		}, rowChange:function () {
			this.notify("RowChange", arguments);
		}, datumChange:function () {
			this.notify("DatumChange", arguments);
		}, beginModifyRow:function (inRowIndex) {
			if (!this.cache[inRowIndex]) {
				this.cache[inRowIndex] = this.copyRow(inRowIndex);
			}
		}, endModifyRow:function (inRowIndex) {
			var cache = this.cache[inRowIndex];
			if (cache) {
				var data = this.getRow(inRowIndex);
				if (!dojox.grid.arrayCompare(cache, data)) {
					this.update(cache, data, inRowIndex);
				}
				delete this.cache[inRowIndex];
			}
		}, cancelModifyRow:function (inRowIndex) {
			var cache = this.cache[inRowIndex];
			if (cache) {
				this.setRow(cache, inRowIndex);
				delete this.cache[inRowIndex];
			}
		}});
		dojo.declare("dojox.grid.data.Table", dojox.grid.data.Rows, {constructor:function () {
			this.cache = [];
		}, colCount:0, data:null, cache:null, measure:function () {
			this.count = this.getRowCount();
			this.colCount = this.getColCount();
			this.allChange();
		}, getRowCount:function () {
			return (this.data ? this.data.length : 0);
		}, getColCount:function () {
			return (this.data && this.data.length ? this.data[0].length : this.fields.count());
		}, badIndex:function (inCaller, inDescriptor) {
			console.debug("dojox.grid.data.Table: badIndex");
		}, isGoodIndex:function (inRowIndex, inColIndex) {
			return (inRowIndex >= 0 && inRowIndex < this.count && (arguments.length < 2 || (inColIndex >= 0 && inColIndex < this.colCount)));
		}, getRow:function (inRowIndex) {
			return this.data[inRowIndex];
		}, copyRow:function (inRowIndex) {
			return this.getRow(inRowIndex).slice(0);
		}, getDatum:function (inRowIndex, inColIndex) {
			return this.data[inRowIndex][inColIndex];
		}, get:function () {
			throw ("Plain \"get\" no longer supported. Use \"getRow\" or \"getDatum\".");
		}, setData:function (inData) {
			this.data = (inData || []);
			this.allChange();
		}, setRow:function (inData, inRowIndex) {
			this.data[inRowIndex] = inData;
			this.rowChange(inData, inRowIndex);
			this.change();
		}, setDatum:function (inDatum, inRowIndex, inColIndex) {
			this.data[inRowIndex][inColIndex] = inDatum;
			this.datumChange(inDatum, inRowIndex, inColIndex);
		}, set:function () {
			throw ("Plain \"set\" no longer supported. Use \"setData\", \"setRow\", or \"setDatum\".");
		}, setRows:function (inData, inRowIndex) {
			for (var i = 0, l = inData.length, r = inRowIndex; i < l; i++, r++) {
				this.setRow(inData[i], r);
			}
		}, update:function (inOldData, inNewData, inRowIndex) {
			return true;
		}, _insert:function (inData, inRowIndex) {
			dojox.grid.arrayInsert(this.data, inRowIndex, inData);
			this.count++;
			return true;
		}, _remove:function (inKeys) {
			for (var i = inKeys.length - 1; i >= 0; i--) {
				dojox.grid.arrayRemove(this.data, inKeys[i]);
			}
			this.count -= inKeys.length;
			return true;
		}, sort:function () {
			this.data.sort(this.makeComparator(arguments));
		}, swap:function (inIndexA, inIndexB) {
			dojox.grid.arraySwap(this.data, inIndexA, inIndexB);
			this.rowChange(this.getRow(inIndexA), inIndexA);
			this.rowChange(this.getRow(inIndexB), inIndexB);
			this.change();
		}, dummy:0});
		dojo.declare("dojox.grid.data.Objects", dojox.grid.data.Table, {constructor:function (inFields, inData, inKey) {
			if (!inFields) {
				this.autoAssignFields();
			}
		}, allChange:function () {
			this.notify("FieldsChange");
			this.inherited(arguments);
		}, autoAssignFields:function () {
			var d = this.data[0], i = 0, field;
			for (var f in d) {
				field = this.fields.get(i++);
				if (!dojo.isString(field.key)) {
					field.key = f;
				}
			}
		}, setData:function (inData) {
			this.data = (inData || []);
			this.autoAssignFields();
			this.allChange();
		}, getDatum:function (inRowIndex, inColIndex) {
			return this.data[inRowIndex][this.fields.get(inColIndex).key];
		}});
		dojo.declare("dojox.grid.data.Dynamic", dojox.grid.data.Table, {constructor:function () {
			this.page = [];
			this.pages = [];
		}, page:null, pages:null, rowsPerPage:100, requests:0, bop:-1, eop:-1, clearData:function () {
			this.pages = [];
			this.bop = this.eop = -1;
			this.setData([]);
		}, getRowCount:function () {
			return this.count;
		}, getColCount:function () {
			return this.fields.count();
		}, setRowCount:function (inCount) {
			this.count = inCount;
			this.change();
		}, requestsPending:function (inBoolean) {
		}, rowToPage:function (inRowIndex) {
			return (this.rowsPerPage ? Math.floor(inRowIndex / this.rowsPerPage) : inRowIndex);
		}, pageToRow:function (inPageIndex) {
			return (this.rowsPerPage ? this.rowsPerPage * inPageIndex : inPageIndex);
		}, requestRows:function (inRowIndex, inCount) {
		}, rowsProvided:function (inRowIndex, inCount) {
			this.requests--;
			if (this.requests == 0) {
				this.requestsPending(false);
			}
		}, requestPage:function (inPageIndex) {
			var row = this.pageToRow(inPageIndex);
			var count = Math.min(this.rowsPerPage, this.count - row);
			if (count > 0) {
				this.requests++;
				this.requestsPending(true);
				setTimeout(dojo.hitch(this, "requestRows", row, count), 1);
			}
		}, needPage:function (inPageIndex) {
			if (!this.pages[inPageIndex]) {
				this.pages[inPageIndex] = true;
				this.requestPage(inPageIndex);
			}
		}, preparePage:function (inRowIndex, inColIndex) {
			if (inRowIndex < this.bop || inRowIndex >= this.eop) {
				var pageIndex = this.rowToPage(inRowIndex);
				this.needPage(pageIndex);
				this.bop = pageIndex * this.rowsPerPage;
				this.eop = this.bop + (this.rowsPerPage || this.count);
			}
		}, isRowLoaded:function (inRowIndex) {
			return Boolean(this.data[inRowIndex]);
		}, removePages:function (inRowIndexes) {
			for (var i = 0, r; ((r = inRowIndexes[i]) != undefined); i++) {
				this.pages[this.rowToPage(r)] = false;
			}
			this.bop = this.eop = -1;
		}, remove:function (inRowIndexes) {
			this.removePages(inRowIndexes);
			dojox.grid.data.Table.prototype.remove.apply(this, arguments);
		}, getRow:function (inRowIndex) {
			var row = this.data[inRowIndex];
			if (!row) {
				this.preparePage(inRowIndex);
			}
			return row;
		}, getDatum:function (inRowIndex, inColIndex) {
			var row = this.getRow(inRowIndex);
			return (row ? row[inColIndex] : this.fields.get(inColIndex).na);
		}, setDatum:function (inDatum, inRowIndex, inColIndex) {
			var row = this.getRow(inRowIndex);
			if (row) {
				row[inColIndex] = inDatum;
				this.datumChange(inDatum, inRowIndex, inColIndex);
			} else {
				console.debug("[" + this.declaredClass + "] dojox.grid.data.dynamic.set: cannot set data on an non-loaded row");
			}
		}, canSort:function () {
			return false;
		}});
		dojox.grid.data.table = dojox.grid.data.Table;
		dojox.grid.data.dynamic = dojox.grid.data.Dynamic;
		dojo.declare("dojox.grid.data.DojoData", dojox.grid.data.Dynamic, {constructor:function (inFields, inData, args) {
			this.count = 1;
			this._rowIdentities = {};
			this._currentlyProcessing = [];
			if (args) {
				dojo.mixin(this, args);
			}
			if (this.store) {
				var f = this.store.getFeatures();
				this._canNotify = f["dojo.data.api.Notification"];
				this._canWrite = f["dojo.data.api.Write"];
				this._canIdentify = f["dojo.data.api.Identity"];
				if (this._canNotify) {
					dojo.connect(this.store, "onSet", this, "_storeDatumChange");
					dojo.connect(this.store, "onDelete", this, "_storeDatumDelete");
					dojo.connect(this.store, "onNew", this, "_storeDatumNew");
				}
				if (this._canWrite) {
					dojo.connect(this.store, "revert", this, "refresh");
				}
			}
		}, markupFactory:function (args, node) {
			return new dojox.grid.data.DojoData(null, null, args);
		}, query:{name:"*"}, store:null, _currentlyProcessing:null, _canNotify:false, _canWrite:false, _canIdentify:false, _rowIdentities:{}, clientSort:false, sortFields:null, queryOptions:null, setData:function (inData) {
			this.store = inData;
			this.data = [];
			this.allChange();
		}, setRowCount:function (inCount) {
			this.count = inCount;
			this.allChange();
		}, beginReturn:function (inCount) {
			if (this.count != inCount) {
				this.setRowCount(inCount);
			}
		}, _setupFields:function (dataItem) {
			if (this.fields._nameMaps) {
				return;
			}
			var m = {};
			var fields = dojo.map(this.store.getAttributes(dataItem), function (item, idx) {
				m[item] = idx;
				m[idx + ".idx"] = item;
				return {name:item, key:item};
			}, this);
			this.fields._nameMaps = m;
			this.fields.set(fields);
			this.notify("FieldsChange");
		}, _getRowFromItem:function (item) {
		}, _createRow:function (item) {
			var row = {};
			row.__dojo_data_item = item;
			dojo.forEach(this.fields.values, function (a) {
				value = this.store.getValue(item, a.name);
				row[a.name] = (value === undefined || value === null) ? "" : value;
			}, this);
			return row;
		}, processRows:function (items, request) {
			if (!items || items.length == 0) {
				return;
			}
			this._setupFields(items[0]);
			dojo.forEach(items, function (item, idx) {
				var row = this._createRow(item);
				this._setRowId(item, request.start, idx);
				this.setRow(row, request.start + idx);
			}, this);
		}, requestRows:function (inRowIndex, inCount) {
			var row = inRowIndex || 0;
			var params = {start:row, count:this.rowsPerPage, query:this.query, sort:this.sortFields, queryOptions:this.queryOptions, onBegin:dojo.hitch(this, "beginReturn"), onComplete:dojo.hitch(this, "processRows"), onError:dojo.hitch(this, "processError")};
			this.store.fetch(params);
		}, getDatum:function (inRowIndex, inColIndex) {
			var row = this.getRow(inRowIndex);
			var field = this.fields.values[inColIndex];
			return row && field ? row[field.name] : field ? field.na : "?";
		}, setDatum:function (inDatum, inRowIndex, inColIndex) {
			var n = this.fields._nameMaps[inColIndex + ".idx"];
			if (n) {
				this.data[inRowIndex][n] = inDatum;
				this.datumChange(inDatum, inRowIndex, inColIndex);
			}
		}, copyRow:function (inRowIndex) {
			var row = {};
			var backstop = {};
			var src = this.getRow(inRowIndex);
			for (var x in src) {
				if (src[x] != backstop[x]) {
					row[x] = src[x];
				}
			}
			return row;
		}, _attrCompare:function (cache, data) {
			dojo.forEach(this.fields.values, function (a) {
				if (cache[a.name] != data[a.name]) {
					return false;
				}
			}, this);
			return true;
		}, endModifyRow:function (inRowIndex) {
			var cache = this.cache[inRowIndex];
			if (cache) {
				var data = this.getRow(inRowIndex);
				if (!this._attrCompare(cache, data)) {
					this.update(cache, data, inRowIndex);
				}
				delete this.cache[inRowIndex];
			}
		}, cancelModifyRow:function (inRowIndex) {
			var cache = this.cache[inRowIndex];
			if (cache) {
				this.setRow(cache, inRowIndex);
				delete this.cache[inRowIndex];
			}
		}, _setRowId:function (item, offset, idx) {
			if (this._canIdentify) {
				this._rowIdentities[this.store.getIdentity(item)] = {rowId:offset + idx, item:item};
			} else {
				var identity = dojo.toJson(this.query) + ":start:" + offset + ":idx:" + idx + ":sort:" + dojo.toJson(this.sortFields);
				this._rowIdentities[identity] = {rowId:offset + idx, item:item};
			}
		}, _getRowId:function (item, isNotItem) {
			var rowId = null;
			if (this._canIdentify && !isNotItem) {
				rowId = this._rowIdentities[this.store.getIdentity(item)].rowId;
			} else {
				var id;
				for (id in this._rowIdentities) {
					if (this._rowIdentities[id].item === item) {
						rowId = this._rowIdentities[id].rowId;
						break;
					}
				}
			}
			return rowId;
		}, _storeDatumChange:function (item, attr, oldVal, newVal) {
			var rowId = this._getRowId(item);
			var row = this.getRow(rowId);
			if (row) {
				row[attr] = newVal;
				var colId = this.fields._nameMaps[attr];
				this.notify("DatumChange", [newVal, rowId, colId]);
			}
		}, _storeDatumDelete:function (item) {
			if (dojo.indexOf(this._currentlyProcessing, item) != -1) {
				return;
			}
			var rowId = this._getRowId(item, true);
			if (rowId != null) {
				this._removeItems([rowId]);
			}
		}, _storeDatumNew:function (item) {
			if (this._disableNew) {
				return;
			}
			this._insertItem(item, this.data.length);
		}, insert:function (item, index) {
			this._disableNew = true;
			var i = this.store.newItem(item);
			this._disableNew = false;
			this._insertItem(i, index);
		}, _insertItem:function (storeItem, index) {
			if (!this.fields._nameMaps) {
				this._setupFields(storeItem);
			}
			var row = this._createRow(storeItem);
			this._setRowId(storeItem, 0, index);
			dojox.grid.data.Dynamic.prototype.insert.apply(this, [row, index]);
		}, datumChange:function (value, rowIdx, colIdx) {
			if (this._canWrite) {
				var row = this.getRow(rowIdx);
				var field = this.fields._nameMaps[colIdx + ".idx"];
				this.store.setValue(row.__dojo_data_item, field, value);
			} else {
				this.notify("DatumChange", arguments);
			}
		}, insertion:function () {
			console.debug("Insertion", arguments);
			this.notify("Insertion", arguments);
			this.notify("Change", arguments);
		}, removal:function () {
			console.debug("Removal", arguments);
			this.notify("Removal", arguments);
			this.notify("Change", arguments);
		}, remove:function (inRowIndexes) {
			for (var i = inRowIndexes.length - 1; i >= 0; i--) {
				var item = this.data[inRowIndexes[i]].__dojo_data_item;
				this._currentlyProcessing.push(item);
				this.store.deleteItem(item);
			}
			this._removeItems(inRowIndexes);
			this._currentlyProcessing = [];
		}, _removeItems:function (inRowIndexes) {
			dojox.grid.data.Dynamic.prototype.remove.apply(this, arguments);
			this._rowIdentities = {};
			for (var i = 0; i < this.data.length; i++) {
				this._setRowId(this.data[i].__dojo_data_item, 0, i);
			}
		}, canSort:function () {
			return true;
		}, sort:function (colIndex) {
			var col = Math.abs(colIndex) - 1;
			this.sortFields = [{"attribute":this.fields.values[col].name, "descending":(colIndex > 0)}];
			this.refresh();
		}, refresh:function () {
			this.clearData(true);
			this.requestRows();
		}, clearData:function (keepStore) {
			this._rowIdentities = {};
			this.pages = [];
			this.bop = this.eop = -1;
			this.count = 0;
			this.setData((keepStore ? this.store : []));
		}, processError:function (error, request) {
			console.log(error);
		}});
	}
	if (!dojo._hasResource["dojox.grid._data.editors"]) {
		dojo._hasResource["dojox.grid._data.editors"] = true;
		dojo.provide("dojox.grid._data.editors");
		dojo.provide("dojox.grid.editors");
		dojo.declare("dojox.grid.editors.Base", null, {constructor:function (inCell) {
			this.cell = inCell;
		}, _valueProp:"value", _formatPending:false, format:function (inDatum, inRowIndex) {
		}, needFormatNode:function (inDatum, inRowIndex) {
			this._formatPending = true;
			dojox.grid.whenIdle(this, "_formatNode", inDatum, inRowIndex);
		}, cancelFormatNode:function () {
			this._formatPending = false;
		}, _formatNode:function (inDatum, inRowIndex) {
			if (this._formatPending) {
				this._formatPending = false;
				dojo.setSelectable(this.cell.grid.domNode, true);
				this.formatNode(this.getNode(inRowIndex), inDatum, inRowIndex);
			}
		}, getNode:function (inRowIndex) {
			return (this.cell.getNode(inRowIndex) || 0).firstChild || 0;
		}, formatNode:function (inNode, inDatum, inRowIndex) {
			if (dojo.isIE) {
				dojox.grid.whenIdle(this, "focus", inRowIndex, inNode);
			} else {
				this.focus(inRowIndex, inNode);
			}
		}, dispatchEvent:function (m, e) {
			if (m in this) {
				return this[m](e);
			}
		}, getValue:function (inRowIndex) {
			return this.getNode(inRowIndex)[this._valueProp];
		}, setValue:function (inRowIndex, inValue) {
			var n = this.getNode(inRowIndex);
			if (n) {
				n[this._valueProp] = inValue;
			}
		}, focus:function (inRowIndex, inNode) {
			dojox.grid.focusSelectNode(inNode || this.getNode(inRowIndex));
		}, save:function (inRowIndex) {
			this.value = this.value || this.getValue(inRowIndex);
		}, restore:function (inRowIndex) {
			this.setValue(inRowIndex, this.value);
		}, _finish:function (inRowIndex) {
			dojo.setSelectable(this.cell.grid.domNode, false);
			this.cancelFormatNode(this.cell);
		}, apply:function (inRowIndex) {
			this.cell.applyEdit(this.getValue(inRowIndex), inRowIndex);
			this._finish(inRowIndex);
		}, cancel:function (inRowIndex) {
			this.cell.cancelEdit(inRowIndex);
			this._finish(inRowIndex);
		}});
		dojox.grid.editors.base = dojox.grid.editors.Base;
		dojo.declare("dojox.grid.editors.Input", dojox.grid.editors.Base, {constructor:function (inCell) {
			this.keyFilter = this.keyFilter || this.cell.keyFilter;
		}, keyFilter:null, format:function (inDatum, inRowIndex) {
			this.needFormatNode(inDatum, inRowIndex);
			return "<input class=\"dojoxGrid-input\" type=\"text\" value=\"" + inDatum + "\">";
		}, formatNode:function (inNode, inDatum, inRowIndex) {
			this.inherited(arguments);
			this.cell.registerOnBlur(inNode, inRowIndex);
		}, doKey:function (e) {
			if (this.keyFilter) {
				var key = String.fromCharCode(e.charCode);
				if (key.search(this.keyFilter) == -1) {
					dojo.stopEvent(e);
				}
			}
		}, _finish:function (inRowIndex) {
			this.inherited(arguments);
			var n = this.getNode(inRowIndex);
			try {
				dojox.grid.fire(n, "blur");
			}
			catch (e) {
			}
		}});
		dojox.grid.editors.input = dojox.grid.editors.Input;
		dojo.declare("dojox.grid.editors.Select", dojox.grid.editors.Input, {constructor:function (inCell) {
			this.options = this.options || this.cell.options;
			this.values = this.values || this.cell.values || this.options;
		}, format:function (inDatum, inRowIndex) {
			this.needFormatNode(inDatum, inRowIndex);
			var h = ["<select class=\"dojoxGrid-select\">"];
			for (var i = 0, o, v; ((o = this.options[i]) !== undefined) && ((v = this.values[i]) !== undefined); i++) {
				h.push("<option", (inDatum == v ? " selected" : ""), " value=\"" + v + "\"", ">", o, "</option>");
			}
			h.push("</select>");
			return h.join("");
		}, getValue:function (inRowIndex) {
			var n = this.getNode(inRowIndex);
			if (n) {
				var i = n.selectedIndex, o = n.options[i];
				return this.cell.returnIndex ? i : o.value || o.innerHTML;
			}
		}});
		dojox.grid.editors.select = dojox.grid.editors.Select;
		dojo.declare("dojox.grid.editors.AlwaysOn", dojox.grid.editors.Input, {alwaysOn:true, _formatNode:function (inDatum, inRowIndex) {
			this.formatNode(this.getNode(inRowIndex), inDatum, inRowIndex);
		}, applyStaticValue:function (inRowIndex) {
			var e = this.cell.grid.edit;
			e.applyCellEdit(this.getValue(inRowIndex), this.cell, inRowIndex);
			e.start(this.cell, inRowIndex, true);
		}});
		dojox.grid.editors.alwaysOn = dojox.grid.editors.AlwaysOn;
		dojo.declare("dojox.grid.editors.Bool", dojox.grid.editors.AlwaysOn, {_valueProp:"checked", format:function (inDatum, inRowIndex) {
			return "<input class=\"dojoxGrid-input\" type=\"checkbox\"" + (inDatum ? " checked=\"checked\"" : "") + " style=\"width: auto\" />";
		}, doclick:function (e) {
			if (e.target.tagName == "INPUT") {
				this.applyStaticValue(e.rowIndex);
			}
		}});
		dojox.grid.editors.bool = dojox.grid.editors.Bool;
	}
	if (!dojo._hasResource["dijit._TimePicker"]) {
		dojo._hasResource["dijit._TimePicker"] = true;
		dojo.provide("dijit._TimePicker");
		dojo.declare("dijit._TimePicker", [dijit._Widget, dijit._Templated], {templateString:"<div id=\"widget_${id}\" class=\"dijitMenu\"\n	><div dojoAttachPoint=\"upArrow\" class=\"dijitButtonNode\"><span class=\"dijitTimePickerA11yText\">&#9650;</span></div\n	><div dojoAttachPoint=\"timeMenu,focusNode\" dojoAttachEvent=\"onclick:_onOptionSelected,onmouseover,onmouseout\"></div\n	><div dojoAttachPoint=\"downArrow\" class=\"dijitButtonNode\"><span class=\"dijitTimePickerA11yText\">&#9660;</span></div\n></div>\n", baseClass:"dijitTimePicker", clickableIncrement:"T00:15:00", visibleIncrement:"T01:00:00", visibleRange:"T05:00:00", value:new Date(), _visibleIncrement:2, _clickableIncrement:1, _totalIncrements:10, constraints:{}, serialize:dojo.date.stamp.toISOString, setValue:function (date, priority) {
			this.value = date;
			this._showText();
		}, isDisabledDate:function (dateObject, locale) {
			return false;
		}, _showText:function () {
			this.timeMenu.innerHTML = "";
			var fromIso = dojo.date.stamp.fromISOString;
			this._clickableIncrementDate = fromIso(this.clickableIncrement);
			this._visibleIncrementDate = fromIso(this.visibleIncrement);
			this._visibleRangeDate = fromIso(this.visibleRange);
			var sinceMidnight = function (date) {
				return date.getHours() * 60 * 60 + date.getMinutes() * 60 + date.getSeconds();
			};
			var clickableIncrementSeconds = sinceMidnight(this._clickableIncrementDate);
			var visibleIncrementSeconds = sinceMidnight(this._visibleIncrementDate);
			var visibleRangeSeconds = sinceMidnight(this._visibleRangeDate);
			var time = this.value.getTime();
			this._refDate = new Date(time - time % (visibleIncrementSeconds * 1000));
			this._refDate.setFullYear(1970, 0, 1);
			this._clickableIncrement = 1;
			this._totalIncrements = visibleRangeSeconds / clickableIncrementSeconds;
			this._visibleIncrement = visibleIncrementSeconds / clickableIncrementSeconds;
			for (var i = -(this._totalIncrements >> 1); i < (this._totalIncrements >> 1); i += this._clickableIncrement) {
				this.timeMenu.appendChild(this._createOption(i));
			}
		}, postCreate:function () {
			if (this.constraints === dijit._TimePicker.prototype.constraints) {
				this.constraints = {};
			}
			dojo.mixin(this, this.constraints);
			if (!this.constraints.locale) {
				this.constraints.locale = this.lang;
			}
			this.connect(this.timeMenu, dojo.isIE ? "onmousewheel" : "DOMMouseScroll", "_mouseWheeled");
			var typematic = dijit.typematic.addMouseListener;
			typematic(this.upArrow, this, this._onArrowUp, 0.8, 500);
			typematic(this.downArrow, this, this._onArrowDown, 0.8, 500);
			this.inherited(arguments);
			this.setValue(this.value);
		}, _createOption:function (index) {
			var div = dojo.doc.createElement("div");
			var date = (div.date = new Date(this._refDate));
			div.index = index;
			var incrementDate = this._clickableIncrementDate;
			date.setHours(date.getHours() + incrementDate.getHours() * index, date.getMinutes() + incrementDate.getMinutes() * index, date.getSeconds() + incrementDate.getSeconds() * index);
			var innerDiv = dojo.doc.createElement("div");
			dojo.addClass(div, this.baseClass + "Item");
			dojo.addClass(innerDiv, this.baseClass + "ItemInner");
			innerDiv.innerHTML = dojo.date.locale.format(date, this.constraints);
			div.appendChild(innerDiv);
			if (index % this._visibleIncrement < 1 && index % this._visibleIncrement > -1) {
				dojo.addClass(div, this.baseClass + "Marker");
			} else {
				if (!(index % this._clickableIncrement)) {
					dojo.addClass(div, this.baseClass + "Tick");
				}
			}
			if (this.isDisabledDate(date)) {
				dojo.addClass(div, this.baseClass + "ItemDisabled");
			}
			if (!dojo.date.compare(this.value, date, this.constraints.selector)) {
				div.selected = true;
				dojo.addClass(div, this.baseClass + "ItemSelected");
			}
			return div;
		}, _onOptionSelected:function (tgt) {
			var tdate = tgt.target.date || tgt.target.parentNode.date;
			if (!tdate || this.isDisabledDate(tdate)) {
				return;
			}
			this.setValue(tdate);
			this.onValueSelected(tdate);
		}, onValueSelected:function (value) {
		}, onmouseover:function (e) {
			var tgr = (e.target.parentNode === this.timeMenu) ? e.target : e.target.parentNode;
			this._highlighted_option = tgr;
			dojo.addClass(tgr, this.baseClass + "ItemHover");
		}, onmouseout:function (e) {
			var tgr = (e.target.parentNode === this.timeMenu) ? e.target : e.target.parentNode;
			if (this._highlighted_option === tgr) {
				dojo.removeClass(tgr, this.baseClass + "ItemHover");
			}
		}, _mouseWheeled:function (e) {
			dojo.stopEvent(e);
			var scrollAmount = (dojo.isIE ? e.wheelDelta : -e.detail);
			this[(scrollAmount > 0 ? "_onArrowUp" : "_onArrowDown")]();
		}, _onArrowUp:function () {
			var index = this.timeMenu.childNodes[0].index - 1;
			var div = this._createOption(index);
			this.timeMenu.removeChild(this.timeMenu.childNodes[this.timeMenu.childNodes.length - 1]);
			this.timeMenu.insertBefore(div, this.timeMenu.childNodes[0]);
		}, _onArrowDown:function () {
			var index = this.timeMenu.childNodes[this.timeMenu.childNodes.length - 1].index + 1;
			var div = this._createOption(index);
			this.timeMenu.removeChild(this.timeMenu.childNodes[0]);
			this.timeMenu.appendChild(div);
		}});
	}
	if (!dojo._hasResource["dijit.form.TimeTextBox"]) {
		dojo._hasResource["dijit.form.TimeTextBox"] = true;
		dojo.provide("dijit.form.TimeTextBox");
		dojo.declare("dijit.form.TimeTextBox", dijit.form._DateTimeTextBox, {popupClass:"dijit._TimePicker", _selector:"time"});
	}
	if (!dojo._hasResource["dojo.data.util.filter"]) {
		dojo._hasResource["dojo.data.util.filter"] = true;
		dojo.provide("dojo.data.util.filter");
		dojo.data.util.filter.patternToRegExp = function (pattern, ignoreCase) {
			var rxp = "^";
			var c = null;
			for (var i = 0; i < pattern.length; i++) {
				c = pattern.charAt(i);
				switch (c) {
				  case "\\":
					rxp += c;
					i++;
					rxp += pattern.charAt(i);
					break;
				  case "*":
					rxp += ".*";
					break;
				  case "?":
					rxp += ".";
					break;
				  case "$":
				  case "^":
				  case "/":
				  case "+":
				  case ".":
				  case "|":
				  case "(":
				  case ")":
				  case "{":
				  case "}":
				  case "[":
				  case "]":
					rxp += "\\";
				  default:
					rxp += c;
				}
			}
			rxp += "$";
			if (ignoreCase) {
				return new RegExp(rxp, "i");
			} else {
				return new RegExp(rxp);
			}
		};
	}
	if (!dojo._hasResource["dojo.data.util.sorter"]) {
		dojo._hasResource["dojo.data.util.sorter"] = true;
		dojo.provide("dojo.data.util.sorter");
		dojo.data.util.sorter.basicComparator = function (a, b) {
			var ret = 0;
			if (a > b || typeof a === "undefined" || a === null) {
				ret = 1;
			} else {
				if (a < b || typeof b === "undefined" || b === null) {
					ret = -1;
				}
			}
			return ret;
		};
		dojo.data.util.sorter.createSortFunction = function (sortSpec, store) {
			var sortFunctions = [];
			function createSortFunction(attr, dir) {
				return function (itemA, itemB) {
					var a = store.getValue(itemA, attr);
					var b = store.getValue(itemB, attr);
					var comparator = null;
					if (store.comparatorMap) {
						if (typeof attr !== "string") {
							attr = store.getIdentity(attr);
						}
						comparator = store.comparatorMap[attr] || dojo.data.util.sorter.basicComparator;
					}
					comparator = comparator || dojo.data.util.sorter.basicComparator;
					return dir * comparator(a, b);
				};
			}
			for (var i = 0; i < sortSpec.length; i++) {
				sortAttribute = sortSpec[i];
				if (sortAttribute.attribute) {
					var direction = (sortAttribute.descending) ? -1 : 1;
					sortFunctions.push(createSortFunction(sortAttribute.attribute, direction));
				}
			}
			return function (rowA, rowB) {
				var i = 0;
				while (i < sortFunctions.length) {
					var ret = sortFunctions[i++](rowA, rowB);
					if (ret !== 0) {
						return ret;
					}
				}
				return 0;
			};
		};
	}
	if (!dojo._hasResource["dojo.data.util.simpleFetch"]) {
		dojo._hasResource["dojo.data.util.simpleFetch"] = true;
		dojo.provide("dojo.data.util.simpleFetch");
		dojo.data.util.simpleFetch.fetch = function (request) {
			request = request || {};
			if (!request.store) {
				request.store = this;
			}
			var self = this;
			var _errorHandler = function (errorData, requestObject) {
				if (requestObject.onError) {
					var scope = requestObject.scope || dojo.global;
					requestObject.onError.call(scope, errorData, requestObject);
				}
			};
			var _fetchHandler = function (items, requestObject) {
				var oldAbortFunction = requestObject.abort || null;
				var aborted = false;
				var startIndex = requestObject.start ? requestObject.start : 0;
				var endIndex = requestObject.count ? (startIndex + requestObject.count) : items.length;
				requestObject.abort = function () {
					aborted = true;
					if (oldAbortFunction) {
						oldAbortFunction.call(requestObject);
					}
				};
				var scope = requestObject.scope || dojo.global;
				if (!requestObject.store) {
					requestObject.store = self;
				}
				if (requestObject.onBegin) {
					requestObject.onBegin.call(scope, items.length, requestObject);
				}
				if (requestObject.sort) {
					items.sort(dojo.data.util.sorter.createSortFunction(requestObject.sort, self));
				}
				if (requestObject.onItem) {
					for (var i = startIndex; (i < items.length) && (i < endIndex); ++i) {
						var item = items[i];
						if (!aborted) {
							requestObject.onItem.call(scope, item, requestObject);
						}
					}
				}
				if (requestObject.onComplete && !aborted) {
					var subset = null;
					if (!requestObject.onItem) {
						subset = items.slice(startIndex, endIndex);
					}
					requestObject.onComplete.call(scope, subset, requestObject);
				}
			};
			this._fetchItems(request, _fetchHandler, _errorHandler);
			return request;
		};
	}
	if (!dojo._hasResource["dojo.data.ItemFileReadStore"]) {
		dojo._hasResource["dojo.data.ItemFileReadStore"] = true;
		dojo.provide("dojo.data.ItemFileReadStore");
		dojo.declare("dojo.data.ItemFileReadStore", null, {constructor:function (keywordParameters) {
			this._arrayOfAllItems = [];
			this._arrayOfTopLevelItems = [];
			this._loadFinished = false;
			this._jsonFileUrl = keywordParameters.url;
			this._jsonData = keywordParameters.data;
			this._datatypeMap = keywordParameters.typeMap || {};
			if (!this._datatypeMap["Date"]) {
				this._datatypeMap["Date"] = {type:Date, deserialize:function (value) {
					return dojo.date.stamp.fromISOString(value);
				}};
			}
			this._features = {"dojo.data.api.Read":true, "dojo.data.api.Identity":true};
			this._itemsByIdentity = null;
			this._storeRefPropName = "_S";
			this._itemNumPropName = "_0";
			this._rootItemPropName = "_RI";
			this._reverseRefMap = "_RRM";
			this._loadInProgress = false;
			this._queuedFetches = [];
		}, url:"", _assertIsItem:function (item) {
			if (!this.isItem(item)) {
				throw new Error("dojo.data.ItemFileReadStore: Invalid item argument.");
			}
		}, _assertIsAttribute:function (attribute) {
			if (typeof attribute !== "string") {
				throw new Error("dojo.data.ItemFileReadStore: Invalid attribute argument.");
			}
		}, getValue:function (item, attribute, defaultValue) {
			var values = this.getValues(item, attribute);
			return (values.length > 0) ? values[0] : defaultValue;
		}, getValues:function (item, attribute) {
			this._assertIsItem(item);
			this._assertIsAttribute(attribute);
			return item[attribute] || [];
		}, getAttributes:function (item) {
			this._assertIsItem(item);
			var attributes = [];
			for (var key in item) {
				if ((key !== this._storeRefPropName) && (key !== this._itemNumPropName) && (key !== this._rootItemPropName) && (key !== this._reverseRefMap)) {
					attributes.push(key);
				}
			}
			return attributes;
		}, hasAttribute:function (item, attribute) {
			return this.getValues(item, attribute).length > 0;
		}, containsValue:function (item, attribute, value) {
			var regexp = undefined;
			if (typeof value === "string") {
				regexp = dojo.data.util.filter.patternToRegExp(value, false);
			}
			return this._containsValue(item, attribute, value, regexp);
		}, _containsValue:function (item, attribute, value, regexp) {
			return dojo.some(this.getValues(item, attribute), function (possibleValue) {
				if (possibleValue !== null && !dojo.isObject(possibleValue) && regexp) {
					if (possibleValue.toString().match(regexp)) {
						return true;
					}
				} else {
					if (value === possibleValue) {
						return true;
					}
				}
			});
		}, isItem:function (something) {
			if (something && something[this._storeRefPropName] === this) {
				if (this._arrayOfAllItems[something[this._itemNumPropName]] === something) {
					return true;
				}
			}
			return false;
		}, isItemLoaded:function (something) {
			return this.isItem(something);
		}, loadItem:function (keywordArgs) {
			this._assertIsItem(keywordArgs.item);
		}, getFeatures:function () {
			return this._features;
		}, getLabel:function (item) {
			if (this._labelAttr && this.isItem(item)) {
				return this.getValue(item, this._labelAttr);
			}
			return undefined;
		}, getLabelAttributes:function (item) {
			if (this._labelAttr) {
				return [this._labelAttr];
			}
			return null;
		}, _fetchItems:function (keywordArgs, findCallback, errorCallback) {
			var self = this;
			var filter = function (requestArgs, arrayOfItems) {
				var items = [];
				if (requestArgs.query) {
					var ignoreCase = requestArgs.queryOptions ? requestArgs.queryOptions.ignoreCase : false;
					var regexpList = {};
					for (var key in requestArgs.query) {
						var value = requestArgs.query[key];
						if (typeof value === "string") {
							regexpList[key] = dojo.data.util.filter.patternToRegExp(value, ignoreCase);
						}
					}
					for (var i = 0; i < arrayOfItems.length; ++i) {
						var match = true;
						var candidateItem = arrayOfItems[i];
						if (candidateItem === null) {
							match = false;
						} else {
							for (var key in requestArgs.query) {
								var value = requestArgs.query[key];
								if (!self._containsValue(candidateItem, key, value, regexpList[key])) {
									match = false;
								}
							}
						}
						if (match) {
							items.push(candidateItem);
						}
					}
					findCallback(items, requestArgs);
				} else {
					for (var i = 0; i < arrayOfItems.length; ++i) {
						var item = arrayOfItems[i];
						if (item !== null) {
							items.push(item);
						}
					}
					findCallback(items, requestArgs);
				}
			};
			if (this._loadFinished) {
				filter(keywordArgs, this._getItemsArray(keywordArgs.queryOptions));
			} else {
				if (this._jsonFileUrl) {
					if (this._loadInProgress) {
						this._queuedFetches.push({args:keywordArgs, filter:filter});
					} else {
						this._loadInProgress = true;
						var getArgs = {url:self._jsonFileUrl, handleAs:"json-comment-optional"};
						var getHandler = dojo.xhrGet(getArgs);
						getHandler.addCallback(function (data) {
							try {
								self._getItemsFromLoadedData(data);
								self._loadFinished = true;
								self._loadInProgress = false;
								filter(keywordArgs, self._getItemsArray(keywordArgs.queryOptions));
								self._handleQueuedFetches();
							}
							catch (e) {
								self._loadFinished = true;
								self._loadInProgress = false;
								errorCallback(e, keywordArgs);
							}
						});
						getHandler.addErrback(function (error) {
							self._loadInProgress = false;
							errorCallback(error, keywordArgs);
						});
					}
				} else {
					if (this._jsonData) {
						try {
							this._loadFinished = true;
							this._getItemsFromLoadedData(this._jsonData);
							this._jsonData = null;
							filter(keywordArgs, this._getItemsArray(keywordArgs.queryOptions));
						}
						catch (e) {
							errorCallback(e, keywordArgs);
						}
					} else {
						errorCallback(new Error("dojo.data.ItemFileReadStore: No JSON source data was provided as either URL or a nested Javascript object."), keywordArgs);
					}
				}
			}
		}, _handleQueuedFetches:function () {
			if (this._queuedFetches.length > 0) {
				for (var i = 0; i < this._queuedFetches.length; i++) {
					var fData = this._queuedFetches[i];
					var delayedQuery = fData.args;
					var delayedFilter = fData.filter;
					if (delayedFilter) {
						delayedFilter(delayedQuery, this._getItemsArray(delayedQuery.queryOptions));
					} else {
						this.fetchItemByIdentity(delayedQuery);
					}
				}
				this._queuedFetches = [];
			}
		}, _getItemsArray:function (queryOptions) {
			if (queryOptions && queryOptions.deep) {
				return this._arrayOfAllItems;
			}
			return this._arrayOfTopLevelItems;
		}, close:function (request) {
		}, _getItemsFromLoadedData:function (dataObject) {
			function valueIsAnItem(aValue) {
				var isItem = ((aValue != null) && (typeof aValue == "object") && (!dojo.isArray(aValue)) && (!dojo.isFunction(aValue)) && (aValue.constructor == Object) && (typeof aValue._reference == "undefined") && (typeof aValue._type == "undefined") && (typeof aValue._value == "undefined"));
				return isItem;
			}
			var self = this;
			function addItemAndSubItemsToArrayOfAllItems(anItem) {
				self._arrayOfAllItems.push(anItem);
				for (var attribute in anItem) {
					var valueForAttribute = anItem[attribute];
					if (valueForAttribute) {
						if (dojo.isArray(valueForAttribute)) {
							var valueArray = valueForAttribute;
							for (var k = 0; k < valueArray.length; ++k) {
								var singleValue = valueArray[k];
								if (valueIsAnItem(singleValue)) {
									addItemAndSubItemsToArrayOfAllItems(singleValue);
								}
							}
						} else {
							if (valueIsAnItem(valueForAttribute)) {
								addItemAndSubItemsToArrayOfAllItems(valueForAttribute);
							}
						}
					}
				}
			}
			this._labelAttr = dataObject.label;
			var i;
			var item;
			this._arrayOfAllItems = [];
			this._arrayOfTopLevelItems = dataObject.items;
			for (i = 0; i < this._arrayOfTopLevelItems.length; ++i) {
				item = this._arrayOfTopLevelItems[i];
				addItemAndSubItemsToArrayOfAllItems(item);
				item[this._rootItemPropName] = true;
			}
			var allAttributeNames = {};
			var key;
			for (i = 0; i < this._arrayOfAllItems.length; ++i) {
				item = this._arrayOfAllItems[i];
				for (key in item) {
					if (key !== this._rootItemPropName) {
						var value = item[key];
						if (value !== null) {
							if (!dojo.isArray(value)) {
								item[key] = [value];
							}
						} else {
							item[key] = [null];
						}
					}
					allAttributeNames[key] = key;
				}
			}
			while (allAttributeNames[this._storeRefPropName]) {
				this._storeRefPropName += "_";
			}
			while (allAttributeNames[this._itemNumPropName]) {
				this._itemNumPropName += "_";
			}
			while (allAttributeNames[this._reverseRefMap]) {
				this._reverseRefMap += "_";
			}
			var arrayOfValues;
			var identifier = dataObject.identifier;
			if (identifier) {
				this._itemsByIdentity = {};
				this._features["dojo.data.api.Identity"] = identifier;
				for (i = 0; i < this._arrayOfAllItems.length; ++i) {
					item = this._arrayOfAllItems[i];
					arrayOfValues = item[identifier];
					var identity = arrayOfValues[0];
					if (!this._itemsByIdentity[identity]) {
						this._itemsByIdentity[identity] = item;
					} else {
						if (this._jsonFileUrl) {
							throw new Error("dojo.data.ItemFileReadStore:  The json data as specified by: [" + this._jsonFileUrl + "] is malformed.  Items within the list have identifier: [" + identifier + "].  Value collided: [" + identity + "]");
						} else {
							if (this._jsonData) {
								throw new Error("dojo.data.ItemFileReadStore:  The json data provided by the creation arguments is malformed.  Items within the list have identifier: [" + identifier + "].  Value collided: [" + identity + "]");
							}
						}
					}
				}
			} else {
				this._features["dojo.data.api.Identity"] = Number;
			}
			for (i = 0; i < this._arrayOfAllItems.length; ++i) {
				item = this._arrayOfAllItems[i];
				item[this._storeRefPropName] = this;
				item[this._itemNumPropName] = i;
			}
			for (i = 0; i < this._arrayOfAllItems.length; ++i) {
				item = this._arrayOfAllItems[i];
				for (key in item) {
					arrayOfValues = item[key];
					for (var j = 0; j < arrayOfValues.length; ++j) {
						value = arrayOfValues[j];
						if (value !== null && typeof value == "object") {
							if (value._type && value._value) {
								var type = value._type;
								var mappingObj = this._datatypeMap[type];
								if (!mappingObj) {
									throw new Error("dojo.data.ItemFileReadStore: in the typeMap constructor arg, no object class was specified for the datatype '" + type + "'");
								} else {
									if (dojo.isFunction(mappingObj)) {
										arrayOfValues[j] = new mappingObj(value._value);
									} else {
										if (dojo.isFunction(mappingObj.deserialize)) {
											arrayOfValues[j] = mappingObj.deserialize(value._value);
										} else {
											throw new Error("dojo.data.ItemFileReadStore: Value provided in typeMap was neither a constructor, nor a an object with a deserialize function");
										}
									}
								}
							}
							if (value._reference) {
								var referenceDescription = value._reference;
								if (!dojo.isObject(referenceDescription)) {
									arrayOfValues[j] = this._itemsByIdentity[referenceDescription];
								} else {
									for (var k = 0; k < this._arrayOfAllItems.length; ++k) {
										var candidateItem = this._arrayOfAllItems[k];
										var found = true;
										for (var refKey in referenceDescription) {
											if (candidateItem[refKey] != referenceDescription[refKey]) {
												found = false;
											}
										}
										if (found) {
											arrayOfValues[j] = candidateItem;
										}
									}
								}
								if (this.referenceIntegrity) {
									var refItem = arrayOfValues[j];
									if (this.isItem(refItem)) {
										this._addReferenceToMap(refItem, item, key);
									}
								}
							} else {
								if (this.isItem(value)) {
									if (this.referenceIntegrity) {
										this._addReferenceToMap(value, item, key);
									}
								}
							}
						}
					}
				}
			}
		}, _addReferenceToMap:function (refItem, parentItem, attribute) {
		}, getIdentity:function (item) {
			var identifier = this._features["dojo.data.api.Identity"];
			if (identifier === Number) {
				return item[this._itemNumPropName];
			} else {
				var arrayOfValues = item[identifier];
				if (arrayOfValues) {
					return arrayOfValues[0];
				}
			}
			return null;
		}, fetchItemByIdentity:function (keywordArgs) {
			if (!this._loadFinished) {
				var self = this;
				if (this._jsonFileUrl) {
					if (this._loadInProgress) {
						this._queuedFetches.push({args:keywordArgs});
					} else {
						this._loadInProgress = true;
						var getArgs = {url:self._jsonFileUrl, handleAs:"json-comment-optional"};
						var getHandler = dojo.xhrGet(getArgs);
						getHandler.addCallback(function (data) {
							var scope = keywordArgs.scope ? keywordArgs.scope : dojo.global;
							try {
								self._getItemsFromLoadedData(data);
								self._loadFinished = true;
								self._loadInProgress = false;
								var item = self._getItemByIdentity(keywordArgs.identity);
								if (keywordArgs.onItem) {
									keywordArgs.onItem.call(scope, item);
								}
								self._handleQueuedFetches();
							}
							catch (error) {
								self._loadInProgress = false;
								if (keywordArgs.onError) {
									keywordArgs.onError.call(scope, error);
								}
							}
						});
						getHandler.addErrback(function (error) {
							self._loadInProgress = false;
							if (keywordArgs.onError) {
								var scope = keywordArgs.scope ? keywordArgs.scope : dojo.global;
								keywordArgs.onError.call(scope, error);
							}
						});
					}
				} else {
					if (this._jsonData) {
						self._getItemsFromLoadedData(self._jsonData);
						self._jsonData = null;
						self._loadFinished = true;
						var item = self._getItemByIdentity(keywordArgs.identity);
						if (keywordArgs.onItem) {
							var scope = keywordArgs.scope ? keywordArgs.scope : dojo.global;
							keywordArgs.onItem.call(scope, item);
						}
					}
				}
			} else {
				var item = this._getItemByIdentity(keywordArgs.identity);
				if (keywordArgs.onItem) {
					var scope = keywordArgs.scope ? keywordArgs.scope : dojo.global;
					keywordArgs.onItem.call(scope, item);
				}
			}
		}, _getItemByIdentity:function (identity) {
			var item = null;
			if (this._itemsByIdentity) {
				item = this._itemsByIdentity[identity];
			} else {
				item = this._arrayOfAllItems[identity];
			}
			if (item === undefined) {
				item = null;
			}
			return item;
		}, getIdentityAttributes:function (item) {
			var identifier = this._features["dojo.data.api.Identity"];
			if (identifier === Number) {
				return null;
			} else {
				return [identifier];
			}
		}, _forceLoad:function () {
			var self = this;
			if (this._jsonFileUrl) {
				var getArgs = {url:self._jsonFileUrl, handleAs:"json-comment-optional", sync:true};
				var getHandler = dojo.xhrGet(getArgs);
				getHandler.addCallback(function (data) {
					try {
						if (self._loadInProgress !== true && !self._loadFinished) {
							self._getItemsFromLoadedData(data);
							self._loadFinished = true;
						}
					}
					catch (e) {
						console.log(e);
						throw e;
					}
				});
				getHandler.addErrback(function (error) {
					throw error;
				});
			} else {
				if (this._jsonData) {
					self._getItemsFromLoadedData(self._jsonData);
					self._jsonData = null;
					self._loadFinished = true;
				}
			}
		}});
		dojo.extend(dojo.data.ItemFileReadStore, dojo.data.util.simpleFetch);
	}
	if (!dojo._hasResource["dijit.form._Spinner"]) {
		dojo._hasResource["dijit.form._Spinner"] = true;
		dojo.provide("dijit.form._Spinner");
		dojo.declare("dijit.form._Spinner", dijit.form.RangeBoundTextBox, {defaultTimeout:500, timeoutChangeRate:0.9, smallDelta:1, largeDelta:10, templateString:"<div class=\"dijit dijitReset dijitInlineTable dijitLeft\"\n\tid=\"widget_${id}\"\n\tdojoAttachEvent=\"onmouseenter:_onMouse,onmouseleave:_onMouse,onmousedown:_onMouse\" waiRole=\"presentation\"\n\t><div class=\"dijitInputLayoutContainer\"\n\t\t><div class=\"dijitReset dijitSpinnerButtonContainer\"\n\t\t\t>&nbsp;<div class=\"dijitReset dijitLeft dijitButtonNode dijitArrowButton dijitUpArrowButton\"\n\t\t\t\tdojoAttachPoint=\"upArrowNode\"\n\t\t\t\tdojoAttachEvent=\"onmouseenter:_onMouse,onmouseleave:_onMouse\"\n\t\t\t\tstateModifier=\"UpArrow\"\n\t\t\t\t><div class=\"dijitArrowButtonInner\">&thinsp;</div\n\t\t\t\t><div class=\"dijitArrowButtonChar\">&#9650;</div\n\t\t\t></div\n\t\t\t><div class=\"dijitReset dijitLeft dijitButtonNode dijitArrowButton dijitDownArrowButton\"\n\t\t\t\tdojoAttachPoint=\"downArrowNode\"\n\t\t\t\tdojoAttachEvent=\"onmouseenter:_onMouse,onmouseleave:_onMouse\"\n\t\t\t\tstateModifier=\"DownArrow\"\n\t\t\t\t><div class=\"dijitArrowButtonInner\">&thinsp;</div\n\t\t\t\t><div class=\"dijitArrowButtonChar\">&#9660;</div\n\t\t\t></div\n\t\t></div\n\t\t><div class=\"dijitReset dijitValidationIcon\"><br></div\n\t\t><div class=\"dijitReset dijitValidationIconText\">&Chi;</div\n\t\t><div class=\"dijitReset dijitInputField\"\n\t\t\t><input class='dijitReset' dojoAttachPoint=\"textbox,focusNode\" type=\"${type}\" dojoAttachEvent=\"onfocus:_update,onkeyup:_update,onkeypress:_onKeyPress\"\n\t\t\t\twaiRole=\"spinbutton\" autocomplete=\"off\" name=\"${name}\"\n\t\t/></div\n\t></div\n></div>\n", baseClass:"dijitSpinner", adjust:function (val, delta) {
			return val;
		}, _arrowState:function (node, pressed) {
			this._active = pressed;
			this.stateModifier = node.getAttribute("stateModifier") || "";
			this._setStateClass();
		}, _arrowPressed:function (nodePressed, direction) {
			if (this.disabled || this.readOnly) {
				return;
			}
			this._arrowState(nodePressed, true);
			this.setValue(this.adjust(this.getValue(), direction * this.smallDelta), false);
			dijit.selectInputText(this.textbox, this.textbox.value.length);
		}, _arrowReleased:function (node) {
			this._wheelTimer = null;
			if (this.disabled || this.readOnly) {
				return;
			}
			this._arrowState(node, false);
		}, _typematicCallback:function (count, node, evt) {
			if (node == this.textbox) {
				node = (evt.keyCode == dojo.keys.UP_ARROW) ? this.upArrowNode : this.downArrowNode;
			}
			if (count == -1) {
				this._arrowReleased(node);
			} else {
				this._arrowPressed(node, (node == this.upArrowNode) ? 1 : -1);
			}
		}, _wheelTimer:null, _mouseWheeled:function (evt) {
			dojo.stopEvent(evt);
			var scrollAmount = 0;
			if (typeof evt.wheelDelta == "number") {
				scrollAmount = evt.wheelDelta;
			} else {
				if (typeof evt.detail == "number") {
					scrollAmount = -evt.detail;
				}
			}
			var node, dir;
			if (scrollAmount > 0) {
				node = this.upArrowNode;
				dir = +1;
			} else {
				if (scrollAmount < 0) {
					node = this.downArrowNode;
					dir = -1;
				} else {
					return;
				}
			}
			this._arrowPressed(node, dir);
			if (this._wheelTimer != null) {
				clearTimeout(this._wheelTimer);
			}
			var _this = this;
			this._wheelTimer = setTimeout(function () {
				_this._arrowReleased(node);
			}, 50);
		}, postCreate:function () {
			this.inherited("postCreate", arguments);
			this.connect(this.textbox, dojo.isIE ? "onmousewheel" : "DOMMouseScroll", "_mouseWheeled");
			this._connects.push(dijit.typematic.addListener(this.upArrowNode, this.textbox, {keyCode:dojo.keys.UP_ARROW, ctrlKey:false, altKey:false, shiftKey:false}, this, "_typematicCallback", this.timeoutChangeRate, this.defaultTimeout));
			this._connects.push(dijit.typematic.addListener(this.downArrowNode, this.textbox, {keyCode:dojo.keys.DOWN_ARROW, ctrlKey:false, altKey:false, shiftKey:false}, this, "_typematicCallback", this.timeoutChangeRate, this.defaultTimeout));
			if (dojo.isIE) {
				var _this = this;
				this.connect(this.domNode, "onresize", function () {
					setTimeout(dojo.hitch(_this, function () {
						this.upArrowNode.style.behavior = "";
						this.downArrowNode.style.behavior = "";
						this._setStateClass();
					}), 0);
				});
			}
		}});
	}
	if (!dojo._hasResource["dojo.number"]) {
		dojo._hasResource["dojo.number"] = true;
		dojo.provide("dojo.number");
		dojo.number.format = function (value, options) {
			options = dojo.mixin({}, options || {});
			var locale = dojo.i18n.normalizeLocale(options.locale);
			var bundle = dojo.i18n.getLocalization("dojo.cldr", "number", locale);
			options.customs = bundle;
			var pattern = options.pattern || bundle[(options.type || "decimal") + "Format"];
			if (isNaN(value)) {
				return null;
			}
			return dojo.number._applyPattern(value, pattern, options);
		};
		dojo.number._numberPatternRE = /[#0,]*[#0](?:\.0*#*)?/;
		dojo.number._applyPattern = function (value, pattern, options) {
			options = options || {};
			var group = options.customs.group;
			var decimal = options.customs.decimal;
			var patternList = pattern.split(";");
			var positivePattern = patternList[0];
			pattern = patternList[(value < 0) ? 1 : 0] || ("-" + positivePattern);
			if (pattern.indexOf("%") != -1) {
				value *= 100;
			} else {
				if (pattern.indexOf("‰") != -1) {
					value *= 1000;
				} else {
					if (pattern.indexOf("¤") != -1) {
						group = options.customs.currencyGroup || group;
						decimal = options.customs.currencyDecimal || decimal;
						pattern = pattern.replace(/\u00a4{1,3}/, function (match) {
							var prop = ["symbol", "currency", "displayName"][match.length - 1];
							return options[prop] || options.currency || "";
						});
					} else {
						if (pattern.indexOf("E") != -1) {
							throw new Error("exponential notation not supported");
						}
					}
				}
			}
			var numberPatternRE = dojo.number._numberPatternRE;
			var numberPattern = positivePattern.match(numberPatternRE);
			if (!numberPattern) {
				throw new Error("unable to find a number expression in pattern: " + pattern);
			}
			return pattern.replace(numberPatternRE, dojo.number._formatAbsolute(value, numberPattern[0], {decimal:decimal, group:group, places:options.places}));
		};
		dojo.number.round = function (value, places, multiple) {
			var pieces = String(value).split(".");
			var length = (pieces[1] && pieces[1].length) || 0;
			if (length > places) {
				var factor = Math.pow(10, places);
				if (multiple > 0) {
					factor *= 10 / multiple;
					places++;
				}
				value = Math.round(value * factor) / factor;
				pieces = String(value).split(".");
				length = (pieces[1] && pieces[1].length) || 0;
				if (length > places) {
					pieces[1] = pieces[1].substr(0, places);
					value = Number(pieces.join("."));
				}
			}
			return value;
		};
		dojo.number._formatAbsolute = function (value, pattern, options) {
			options = options || {};
			if (options.places === true) {
				options.places = 0;
			}
			if (options.places === Infinity) {
				options.places = 6;
			}
			var patternParts = pattern.split(".");
			var maxPlaces = (options.places >= 0) ? options.places : (patternParts[1] && patternParts[1].length) || 0;
			if (!(options.round < 0)) {
				value = dojo.number.round(value, maxPlaces, options.round);
			}
			var valueParts = String(Math.abs(value)).split(".");
			var fractional = valueParts[1] || "";
			if (options.places) {
				valueParts[1] = dojo.string.pad(fractional.substr(0, options.places), options.places, "0", true);
			} else {
				if (patternParts[1] && options.places !== 0) {
					var pad = patternParts[1].lastIndexOf("0") + 1;
					if (pad > fractional.length) {
						valueParts[1] = dojo.string.pad(fractional, pad, "0", true);
					}
					var places = patternParts[1].length;
					if (places < fractional.length) {
						valueParts[1] = fractional.substr(0, places);
					}
				} else {
					if (valueParts[1]) {
						valueParts.pop();
					}
				}
			}
			var patternDigits = patternParts[0].replace(",", "");
			pad = patternDigits.indexOf("0");
			if (pad != -1) {
				pad = patternDigits.length - pad;
				if (pad > valueParts[0].length) {
					valueParts[0] = dojo.string.pad(valueParts[0], pad);
				}
				if (patternDigits.indexOf("#") == -1) {
					valueParts[0] = valueParts[0].substr(valueParts[0].length - pad);
				}
			}
			var index = patternParts[0].lastIndexOf(",");
			var groupSize, groupSize2;
			if (index != -1) {
				groupSize = patternParts[0].length - index - 1;
				var remainder = patternParts[0].substr(0, index);
				index = remainder.lastIndexOf(",");
				if (index != -1) {
					groupSize2 = remainder.length - index - 1;
				}
			}
			var pieces = [];
			for (var whole = valueParts[0]; whole; ) {
				var off = whole.length - groupSize;
				pieces.push((off > 0) ? whole.substr(off) : whole);
				whole = (off > 0) ? whole.slice(0, off) : "";
				if (groupSize2) {
					groupSize = groupSize2;
					delete groupSize2;
				}
			}
			valueParts[0] = pieces.reverse().join(options.group || ",");
			return valueParts.join(options.decimal || ".");
		};
		dojo.number.regexp = function (options) {
			return dojo.number._parseInfo(options).regexp;
		};
		dojo.number._parseInfo = function (options) {
			options = options || {};
			var locale = dojo.i18n.normalizeLocale(options.locale);
			var bundle = dojo.i18n.getLocalization("dojo.cldr", "number", locale);
			var pattern = options.pattern || bundle[(options.type || "decimal") + "Format"];
			var group = bundle.group;
			var decimal = bundle.decimal;
			var factor = 1;
			if (pattern.indexOf("%") != -1) {
				factor /= 100;
			} else {
				if (pattern.indexOf("‰") != -1) {
					factor /= 1000;
				} else {
					var isCurrency = pattern.indexOf("¤") != -1;
					if (isCurrency) {
						group = bundle.currencyGroup || group;
						decimal = bundle.currencyDecimal || decimal;
					}
				}
			}
			var patternList = pattern.split(";");
			if (patternList.length == 1) {
				patternList.push("-" + patternList[0]);
			}
			var re = dojo.regexp.buildGroupRE(patternList, function (pattern) {
				pattern = "(?:" + dojo.regexp.escapeString(pattern, ".") + ")";
				return pattern.replace(dojo.number._numberPatternRE, function (format) {
					var flags = {signed:false, separator:options.strict ? group : [group, ""], fractional:options.fractional, decimal:decimal, exponent:false};
					var parts = format.split(".");
					var places = options.places;
					if (parts.length == 1 || places === 0) {
						flags.fractional = false;
					} else {
						if (places === undefined) {
							places = parts[1].lastIndexOf("0") + 1;
						}
						if (places && options.fractional == undefined) {
							flags.fractional = true;
						}
						if (!options.places && (places < parts[1].length)) {
							places += "," + parts[1].length;
						}
						flags.places = places;
					}
					var groups = parts[0].split(",");
					if (groups.length > 1) {
						flags.groupSize = groups.pop().length;
						if (groups.length > 1) {
							flags.groupSize2 = groups.pop().length;
						}
					}
					return "(" + dojo.number._realNumberRegexp(flags) + ")";
				});
			}, true);
			if (isCurrency) {
				re = re.replace(/(\s*)(\u00a4{1,3})(\s*)/g, function (match, before, target, after) {
					var prop = ["symbol", "currency", "displayName"][target.length - 1];
					var symbol = dojo.regexp.escapeString(options[prop] || options.currency || "");
					before = before ? "\\s" : "";
					after = after ? "\\s" : "";
					if (!options.strict) {
						if (before) {
							before += "*";
						}
						if (after) {
							after += "*";
						}
						return "(?:" + before + symbol + after + ")?";
					}
					return before + symbol + after;
				});
			}
			return {regexp:re.replace(/[\xa0 ]/g, "[\\s\\xa0]"), group:group, decimal:decimal, factor:factor};
		};
		dojo.number.parse = function (expression, options) {
			var info = dojo.number._parseInfo(options);
			var results = (new RegExp("^" + info.regexp + "$")).exec(expression);
			if (!results) {
				return NaN;
			}
			var absoluteMatch = results[1];
			if (!results[1]) {
				if (!results[2]) {
					return NaN;
				}
				absoluteMatch = results[2];
				info.factor *= -1;
			}
			absoluteMatch = absoluteMatch.replace(new RegExp("[" + info.group + "\\s\\xa0" + "]", "g"), "").replace(info.decimal, ".");
			return Number(absoluteMatch) * info.factor;
		};
		dojo.number._realNumberRegexp = function (flags) {
			flags = flags || {};
			if (!("places" in flags)) {
				flags.places = Infinity;
			}
			if (typeof flags.decimal != "string") {
				flags.decimal = ".";
			}
			if (!("fractional" in flags) || /^0/.test(flags.places)) {
				flags.fractional = [true, false];
			}
			if (!("exponent" in flags)) {
				flags.exponent = [true, false];
			}
			if (!("eSigned" in flags)) {
				flags.eSigned = [true, false];
			}
			var integerRE = dojo.number._integerRegexp(flags);
			var decimalRE = dojo.regexp.buildGroupRE(flags.fractional, function (q) {
				var re = "";
				if (q && (flags.places !== 0)) {
					re = "\\" + flags.decimal;
					if (flags.places == Infinity) {
						re = "(?:" + re + "\\d+)?";
					} else {
						re += "\\d{" + flags.places + "}";
					}
				}
				return re;
			}, true);
			var exponentRE = dojo.regexp.buildGroupRE(flags.exponent, function (q) {
				if (q) {
					return "([eE]" + dojo.number._integerRegexp({signed:flags.eSigned}) + ")";
				}
				return "";
			});
			var realRE = integerRE + decimalRE;
			if (decimalRE) {
				realRE = "(?:(?:" + realRE + ")|(?:" + decimalRE + "))";
			}
			return realRE + exponentRE;
		};
		dojo.number._integerRegexp = function (flags) {
			flags = flags || {};
			if (!("signed" in flags)) {
				flags.signed = [true, false];
			}
			if (!("separator" in flags)) {
				flags.separator = "";
			} else {
				if (!("groupSize" in flags)) {
					flags.groupSize = 3;
				}
			}
			var signRE = dojo.regexp.buildGroupRE(flags.signed, function (q) {
				return q ? "[-+]" : "";
			}, true);
			var numberRE = dojo.regexp.buildGroupRE(flags.separator, function (sep) {
				if (!sep) {
					return "(?:0|[1-9]\\d*)";
				}
				sep = dojo.regexp.escapeString(sep);
				if (sep == " ") {
					sep = "\\s";
				} else {
					if (sep == " ") {
						sep = "\\s\\xa0";
					}
				}
				var grp = flags.groupSize, grp2 = flags.groupSize2;
				if (grp2) {
					var grp2RE = "(?:0|[1-9]\\d{0," + (grp2 - 1) + "}(?:[" + sep + "]\\d{" + grp2 + "})*[" + sep + "]\\d{" + grp + "})";
					return ((grp - grp2) > 0) ? "(?:" + grp2RE + "|(?:0|[1-9]\\d{0," + (grp - 1) + "}))" : grp2RE;
				}
				return "(?:0|[1-9]\\d{0," + (grp - 1) + "}(?:[" + sep + "]\\d{" + grp + "})*)";
			}, true);
			return signRE + numberRE;
		};
	}
	if (!dojo._hasResource["dijit.form.NumberTextBox"]) {
		dojo._hasResource["dijit.form.NumberTextBox"] = true;
		dojo.provide("dijit.form.NumberTextBox");
		dojo.declare("dijit.form.NumberTextBoxMixin", null, {regExpGen:dojo.number.regexp, editOptions:{pattern:"#.######"}, _onFocus:function () {
			this.setValue(this.getValue(), false);
			this.inherited(arguments);
		}, _formatter:dojo.number.format, format:function (value, constraints) {
			if (typeof value == "string") {
				return value;
			}
			if (isNaN(value)) {
				return "";
			}
			if (this.editOptions && this._focused) {
				constraints = dojo.mixin(dojo.mixin({}, this.editOptions), this.constraints);
			}
			return this._formatter(value, constraints);
		}, parse:dojo.number.parse, filter:function (value) {
			if (typeof value == "string") {
				return this.inherited("filter", arguments);
			}
			return isNaN(value) ? "" : value;
		}, value:NaN});
		dojo.declare("dijit.form.NumberTextBox", [dijit.form.RangeBoundTextBox, dijit.form.NumberTextBoxMixin], {});
	}
	if (!dojo._hasResource["dijit.form.NumberSpinner"]) {
		dojo._hasResource["dijit.form.NumberSpinner"] = true;
		dojo.provide("dijit.form.NumberSpinner");
		dojo.declare("dijit
