You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2015/03/22 17:05:13 UTC

[21/54] [partial] camel git commit: CAMEL-7263: Remove not maintained and deprecated camel-web module.

http://git-wip-us.apache.org/repos/asf/camel/blob/9f5e32db/components/camel-web/src/main/webapp/js/dojox/dtl.js.uncompressed.js
----------------------------------------------------------------------
diff --git a/components/camel-web/src/main/webapp/js/dojox/dtl.js.uncompressed.js b/components/camel-web/src/main/webapp/js/dojox/dtl.js.uncompressed.js
deleted file mode 100644
index 2892842..0000000
--- a/components/camel-web/src/main/webapp/js/dojox/dtl.js.uncompressed.js
+++ /dev/null
@@ -1,2856 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-/*
-	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.
-*/
-
-if(!dojo._hasResource["dojox.string.Builder"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dojox.string.Builder"] = true;
-dojo.provide("dojox.string.Builder");
-
-dojox.string.Builder = function(/*String?*/str){
-	//	summary:
-	//		A fast buffer for creating large strings.
-	//
-	//	length: Number
-	//		The current length of the internal string.
-
-	//	N.B. the public nature of the internal buffer is no longer
-	//	needed because the IE-specific fork is no longer needed--TRT.
-	var b = "";
-	this.length = 0;
-	
-	this.append = function(/* String... */s){ 
-		// summary: Append all arguments to the end of the buffer 
-		if(arguments.length>1){
-			/*  
-				This is a loop unroll was designed specifically for Firefox;
-				it would seem that static index access on an Arguments
-				object is a LOT faster than doing dynamic index access.
-				Therefore, we create a buffer string and take advantage
-				of JS's switch fallthrough.  The peformance of this method
-				comes very close to straight up string concatenation (+=).
-
-				If the arguments object length is greater than 9, we fall
-				back to standard dynamic access.
-
-				This optimization seems to have no real effect on either
-				Safari or Opera, so we just use it for all.
-
-				It turns out also that this loop unroll can increase performance
-				significantly with Internet Explorer, particularly when 
-				as many arguments are provided as possible.
-
-				Loop unroll per suggestion from Kris Zyp, implemented by 
-				Tom Trenka.
-
-				Note: added empty string to force a string cast if needed.
-			 */
-			var tmp="", l=arguments.length;
-			switch(l){
-				case 9: tmp=""+arguments[8]+tmp;
-				case 8: tmp=""+arguments[7]+tmp;
-				case 7: tmp=""+arguments[6]+tmp;
-				case 6: tmp=""+arguments[5]+tmp;
-				case 5: tmp=""+arguments[4]+tmp;
-				case 4: tmp=""+arguments[3]+tmp;
-				case 3: tmp=""+arguments[2]+tmp;
-				case 2: {
-					b+=""+arguments[0]+arguments[1]+tmp;
-					break;
-				}
-				default: {
-					var i=0;
-					while(i<arguments.length){
-						tmp += arguments[i++];
-					}
-					b += tmp;
-				}
-			}
-		} else {
-			b += s;
-		}
-		this.length = b.length;
-		return this;	//	dojox.string.Builder
-	};
-	
-	this.concat = function(/*String...*/s){
-		//	summary:
-		//		Alias for append.
-		return this.append.apply(this, arguments);	//	dojox.string.Builder
-	};
-	
-	this.appendArray = function(/*Array*/strings) {
-		//	summary:
-		//		Append an array of items to the internal buffer.
-
-		//	Changed from String.prototype.concat.apply because of IE.
-		return this.append.apply(this, strings);	//	dojox.string.Builder
-	};
-	
-	this.clear = function(){
-		//	summary: 
-		//		Remove all characters from the buffer.
-		b = "";
-		this.length = 0;
-		return this;	//	dojox.string.Builder
-	};
-	
-	this.replace = function(/* String */oldStr, /* String */ newStr){
-		// 	summary: 
-		//		Replace instances of one string with another in the buffer.
-		b = b.replace(oldStr,newStr);
-		this.length = b.length;
-		return this;	//	dojox.string.Builder
-	};
-	
-	this.remove = function(/* Number */start, /* Number? */len){
-		//	summary:
-		//		Remove len characters starting at index start.  If len
-		//		is not provided, the end of the string is assumed.
-		if(len===undefined){ len = b.length; }
-		if(len == 0){ return this; }
-		b = b.substr(0, start) + b.substr(start+len);
-		this.length = b.length;
-		return this;	//	dojox.string.Builder
-	};
-	
-	this.insert = function(/* Number */index, /* String */str){
-		//	summary: 
-		//		Insert string str starting at index.
-		if(index == 0){
-			b = str + b;
-		}else{
-			b = b.slice(0, index) + str + b.slice(index);
-		}
-		this.length = b.length;
-		return this;	//	dojox.string.Builder
-	};
-	
-	this.toString = function(){
-		//	summary:
-		//		Return the string representation of the internal buffer.
-		return b;	//	String
-	};
-
-	//	initialize the buffer.
-	if(str){ this.append(str); }
-};
-
-}
-
-if(!dojo._hasResource["dojox.string.tokenize"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dojox.string.tokenize"] = true;
-dojo.provide("dojox.string.tokenize");
-
-dojox.string.tokenize = function(/*String*/ str, /*RegExp*/ re, /*Function?*/ parseDelim, /*Object?*/ instance){
-	// summary:
-	//		Split a string by a regular expression with the ability to capture the delimeters
-	// parseDelim:
-	//		Each group (excluding the 0 group) is passed as a parameter. If the function returns
-	//		a value, it's added to the list of tokens.
-	// instance:
-	//		Used as the "this" instance when calling parseDelim
-	var tokens = [];
-	var match, content, lastIndex = 0;
-	while(match = re.exec(str)){
-		content = str.slice(lastIndex, re.lastIndex - match[0].length);
-		if(content.length){
-			tokens.push(content);
-		}
-		if(parseDelim){
-			if(dojo.isOpera){
-				var copy = match.slice(0);
-				while(copy.length < match.length){
-					copy.push(null);
-				}
-				match = copy;
-			}
-			var parsed = parseDelim.apply(instance, match.slice(1).concat(tokens.length));
-			if(typeof parsed != "undefined"){
-				tokens.push(parsed);
-			}
-		}
-		lastIndex = re.lastIndex;
-	}
-	content = str.slice(lastIndex);
-	if(content.length){
-		tokens.push(content);
-	}
-	return tokens;
-}
-
-}
-
-if(!dojo._hasResource["dojox.dtl._base"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dojox.dtl._base"] = true;
-dojo.provide("dojox.dtl._base");
-
-
-
-
-dojo.experimental("dojox.dtl");
-
-(function(){
-	var dd = dojox.dtl;
-
-	dd.TOKEN_BLOCK = -1;
-	dd.TOKEN_VAR = -2;
-	dd.TOKEN_COMMENT = -3;
-	dd.TOKEN_TEXT = 3;
-
-	dd._Context = dojo.extend(function(dict){
-		// summary: Pass one of these when rendering a template to tell the template what values to use.
-		dojo._mixin(this, dict || {});
-		this._dicts = [];
-	},
-	{
-		push: function(){
-			var last = this;
-			var context = dojo.delegate(this);
-			context.pop = function(){ return last; }
-			return context;
-		},
-		pop: function(){
-			throw new Error("pop() called on empty Context");
-		},
-		get: function(key, otherwise){
-			if(typeof this[key] != "undefined"){
-				return this._normalize(this[key]);
-			}
-
-			for(var i = 0, dict; dict = this._dicts[i]; i++){
-				if(typeof dict[key] != "undefined"){
-					return this._normalize(dict[key]);
-				}
-			}
-
-			return otherwise;
-		},
-		_normalize: function(value){
-			if(value instanceof Date){
-				value.year = value.getFullYear();
-				value.month = value.getMonth() + 1;
-				value.day = value.getDate();
-				value.date = value.year + "-" + ("0" + value.month).slice(-2) + "-" + ("0" + value.day).slice(-2);
-				value.hour = value.getHours();
-				value.minute = value.getMinutes();
-				value.second = value.getSeconds();
-				value.microsecond = value.getMilliseconds();
-			}
-			return value;
-		},
-		update: function(dict){
-			var context = this.push();
-			if(dict){
-				dojo._mixin(this, dict);
-			}
-			return context;
-		}
-	});
-
-	var smart_split_re = /("(?:[^"\\]*(?:\\.[^"\\]*)*)"|'(?:[^'\\]*(?:\\.[^'\\]*)*)'|[^\s]+)/g;           
-	var split_re = /\s+/g;
-	var split = function(/*String|RegExp?*/ splitter, /*Integer?*/ limit){
-		splitter = splitter || split_re;
-		if(!(splitter instanceof RegExp)){
-			splitter = new RegExp(splitter, "g");
-		}
-		if(!splitter.global){
-			throw new Error("You must use a globally flagged RegExp with split " + splitter);
-		}
-		splitter.exec(""); // Reset the global
-
-		var part, parts = [], lastIndex = 0, i = 0;
-		while(part = splitter.exec(this)){
-			parts.push(this.slice(lastIndex, splitter.lastIndex - part[0].length));
-			lastIndex = splitter.lastIndex;
-			if(limit && (++i > limit - 1)){
-				break;
-			}
-		}
-		parts.push(this.slice(lastIndex));
-		return parts;
-	}
-
-	dd.Token = function(token_type, contents){
-		this.token_type = token_type;
-		this.contents = new String(dojo.trim(contents));
-		this.contents.split = split;
-		this.split = function(){
-			return String.prototype.split.apply(this.contents, arguments);
-		}
-	}
-	dd.Token.prototype.split_contents = function(/*Integer?*/ limit){
-		var bit, bits = [], i = 0;
-		limit = limit || 999;
-		while(i++ < limit && (bit = smart_split_re.exec(this.contents))){
-			bit = bit[0];
-			if(bit.charAt(0) == '"' && bit.slice(-1) == '"'){
-				bits.push('"' + bit.slice(1, -1).replace('\\"', '"').replace('\\\\', '\\') + '"');
-			}else if(bit.charAt(0) == "'" && bit.slice(-1) == "'"){
-				bits.push("'" + bit.slice(1, -1).replace("\\'", "'").replace('\\\\', '\\') + "'");
-			}else{
-				bits.push(bit);
-			}
-		}
-		return bits;
-	}
-
-	var ddt = dd.text = {
-		_get: function(module, name, errorless){
-			// summary: Used to find both tags and filters
-			var params = dd.register.get(module, name.toLowerCase(), errorless);
-			if(!params){
-				if(!errorless){
-					throw new Error("No tag found for " + name);
-				}
-				return null;
-			}
-
-			var fn = params[1];
-			var require = params[2];
-
-			var parts;
-			if(fn.indexOf(":") != -1){
-				parts = fn.split(":");
-				fn = parts.pop();
-			}
-
-			dojo["require"](require);
-
-			var parent = dojo.getObject(require);
-
-			return parent[fn || name] || parent[name + "_"] || parent[fn + "_"];
-		},
-		getTag: function(name, errorless){
-			return ddt._get("tag", name, errorless);
-		},
-		getFilter: function(name, errorless){
-			return ddt._get("filter", name, errorless);
-		},
-		getTemplate: function(file){
-			return new dd.Template(ddt.getTemplateString(file));
-		},
-		getTemplateString: function(file){
-			return dojo._getText(file.toString()) || "";
-		},
-		_resolveLazy: function(location, sync, json){
-			if(sync){
-				if(json){
-					return dojo.fromJson(dojo._getText(location)) || {};
-				}else{
-					return dd.text.getTemplateString(location);
-				}
-			}else{
-				return dojo.xhrGet({
-					handleAs: (json) ? "json" : "text",
-					url: location
-				});
-			}
-		},
-		_resolveTemplateArg: function(arg, sync){
-			if(ddt._isTemplate(arg)){
-				if(!sync){
-					var d = new dojo.Deferred();
-					d.callback(arg);
-					return d;
-				}
-				return arg;
-			}
-			return ddt._resolveLazy(arg, sync);
-		},
-		_isTemplate: function(arg){
-			return (typeof arg == "undefined") || (typeof arg == "string" && (arg.match(/^\s*[<{]/) || arg.indexOf(" ") != -1));
-		},
-		_resolveContextArg: function(arg, sync){
-			if(arg.constructor == Object){
-				if(!sync){
-					var d = new dojo.Deferred;
-					d.callback(arg);
-					return d;
-				}
-				return arg;
-			}
-			return ddt._resolveLazy(arg, sync, true);
-		},
-		_re: /(?:\{\{\s*(.+?)\s*\}\}|\{%\s*(load\s*)?(.+?)\s*%\})/g,
-		tokenize: function(str){
-			return dojox.string.tokenize(str, ddt._re, ddt._parseDelims);
-		},
-		_parseDelims: function(varr, load, tag){
-			if(varr){
-				return [dd.TOKEN_VAR, varr];
-			}else if(load){
-				var parts = dojo.trim(tag).split(/\s+/g);
-				for(var i = 0, part; part = parts[i]; i++){
-					dojo["require"](part);
-				}
-			}else{
-				return [dd.TOKEN_BLOCK, tag];
-			}
-		}
-	}
-
-	dd.Template = dojo.extend(function(/*String|dojo._Url*/ template, /*Boolean*/ isString){
-		// template:
-		//		The string or location of the string to
-		//		use as a template
-		var str = isString ? template : ddt._resolveTemplateArg(template, true) || "";
-		var tokens = ddt.tokenize(str);
-		var parser = new dd._Parser(tokens);
-		this.nodelist = parser.parse();
-	},
-	{
-		update: function(node, context){
-			// node: DOMNode|String|dojo.NodeList
-			//		A node reference or set of nodes
-			// context: dojo._Url|String|Object
-			//		The context object or location
-			return ddt._resolveContextArg(context).addCallback(this, function(contextObject){
-				var content = this.render(new dd._Context(contextObject));
-				if(node.forEach){
-					node.forEach(function(item){
-						item.innerHTML = content;
-					});
-				}else{
-					dojo.byId(node).innerHTML = content;
-				}
-				return this;
-			});
-		},
-		render: function(context, /*concatenatable?*/ buffer){
-			buffer = buffer || this.getBuffer();
-			context = context || new dd._Context({});
-			return this.nodelist.render(context, buffer) + "";
-		},
-		getBuffer: function(){
-			
-			return new dojox.string.Builder();
-		}
-	});
-
-	var qfRe = /\{\{\s*(.+?)\s*\}\}/g;
-	dd.quickFilter = function(str){
-		if(!str){
-			return new dd._NodeList();
-		}
-
-		if(str.indexOf("{%") == -1){
-			return new dd._QuickNodeList(dojox.string.tokenize(str, qfRe, function(token){
-				return new dd._Filter(token);
-			}));
-		}
-	}
-
-	dd._QuickNodeList = dojo.extend(function(contents){
-		this.contents = contents;
-	},
-	{
-		render: function(context, buffer){
-			for(var i=0, l=this.contents.length; i<l; i++){
-				if(this.contents[i].resolve){
-					buffer = buffer.concat(this.contents[i].resolve(context));
-				}else{
-					buffer = buffer.concat(this.contents[i]);
-				}
-			}
-			return buffer;
-		},
-		dummyRender: function(context){ return this.render(context, dd.Template.prototype.getBuffer()).toString(); },
-		clone: function(buffer){ return this; }
-	});
-
-	dd._Filter = dojo.extend(function(token){
-		// summary: Uses a string to find (and manipulate) a variable
-		if(!token) throw new Error("Filter must be called with variable name");
-		this.contents = token;
-
-		var cache = this._cache[token];
-		if(cache){
-			this.key = cache[0];
-			this.filters = cache[1];
-		}else{
-			this.filters = [];
-			dojox.string.tokenize(token, this._re, this._tokenize, this);
-			this._cache[token] = [this.key, this.filters];
-		}
-	},
-	{
-		_cache: {},
-		_re: /(?:^_\("([^\\"]*(?:\\.[^\\"])*)"\)|^"([^\\"]*(?:\\.[^\\"]*)*)"|^([a-zA-Z0-9_.]+)|\|(\w+)(?::(?:_\("([^\\"]*(?:\\.[^\\"])*)"\)|"([^\\"]*(?:\\.[^\\"]*)*)"|([a-zA-Z0-9_.]+)|'([^\\']*(?:\\.[^\\']*)*)'))?|^'([^\\']*(?:\\.[^\\']*)*)')/g,
-		_values: {
-			0: '"', // _("text")
-			1: '"', // "text"
-			2: "", // variable
-			8: '"' // 'text'
-		},
-		_args: {
-			4: '"', // :_("text")
-			5: '"', // :"text"
-			6: "", // :variable
-			7: "'"// :'text'
-		},
-		_tokenize: function(){
-			var pos, arg;
-
-			for(var i = 0, has = []; i < arguments.length; i++){
-				has[i] = (typeof arguments[i] != "undefined" && typeof arguments[i] == "string" && arguments[i]);
-			}
-
-			if(!this.key){
-				for(pos in this._values){
-					if(has[pos]){
-						this.key = this._values[pos] + arguments[pos] + this._values[pos];
-						break;
-					}
-				}
-			}else{
-				for(pos in this._args){
-					if(has[pos]){
-						var value = arguments[pos];
-						if(this._args[pos] == "'"){
-							value = value.replace(/\\'/g, "'");
-						}else if(this._args[pos] == '"'){
-							value = value.replace(/\\"/g, '"');
-						}
-						arg = [!this._args[pos], value];
-						break;
-					}
-				}
-				// Get a named filter
-				var fn = ddt.getFilter(arguments[3]);
-				if(!dojo.isFunction(fn)) throw new Error(arguments[3] + " is not registered as a filter");
-				this.filters.push([fn, arg]);
-			}
-		},
-		getExpression: function(){
-			return this.contents;
-		},
-		resolve: function(context){
-			if(typeof this.key == "undefined"){
-				return "";
-			}
-
-			var str = this.resolvePath(this.key, context);
-
-			for(var i = 0, filter; filter = this.filters[i]; i++){
-				// Each filter has the function in [0], a boolean in [1][0] of whether it's a variable or a string
-				// and [1][1] is either the variable name of the string content.
-				if(filter[1]){
-					if(filter[1][0]){
-						str = filter[0](str, this.resolvePath(filter[1][1], context));
-					}else{
-						str = filter[0](str, filter[1][1]);
-					}
-				}else{
-					str = filter[0](str);
-				}
-			}
-
-			return str;
-		},
-		resolvePath: function(path, context){
-			var current, parts;
-			var first = path.charAt(0);
-			var last = path.slice(-1);
-			if(!isNaN(parseInt(first))){
-				current = (path.indexOf(".") == -1) ? parseInt(path) : parseFloat(path);
-			}else if(first == '"' && first == last){
-				current = path.slice(1, -1);
-			}else{
-				if(path == "true"){ return true; }
-				if(path == "false"){ return false; }
-				if(path == "null" || path == "None"){ return null; }
-				parts = path.split(".");
-				current = context.get(parts[0]);
-
-				if(dojo.isFunction(current)){
-					var self = context.getThis && context.getThis();
-					if(current.alters_data){
-						current = "";
-					}else if(self){
-						current = current.call(self);
-					}else{
-						current = "";
-					}
-				}
-
-				for(var i = 1; i < parts.length; i++){
-					var part = parts[i];
-					if(current){
-						var base = current;
-						if(dojo.isObject(current) && part == "items" && typeof current[part] == "undefined"){
-							var items = [];
-							for(var key in current){
-								items.push([key, current[key]]);
-							}
-							current = items;
-							continue;
-						}
-
-						if(current.get && dojo.isFunction(current.get) && current.get.safe){
-							current = current.get(part);
-						}else if(typeof current[part] == "undefined"){
-							current = current[part];
-							break;
-						}else{
-							current = current[part];
-						}
-
-						if(dojo.isFunction(current)){
-							if(current.alters_data){
-								current = "";
-							}else{
-								current = current.call(base);
-							}
-						}else if(current instanceof Date){
-							current = dd._Context.prototype._normalize(current);
-						}
-					}else{
-						return "";
-					}
-				}
-			}
-			return current;
-		}
-	});
-
-	dd._TextNode = dd._Node = dojo.extend(function(/*Object*/ obj){
-		// summary: Basic catch-all node
-		this.contents = obj;
-	},
-	{
-		set: function(data){
-			this.contents = data;
-			return this;
-		},
-		render: function(context, buffer){
-			// summary: Adds content onto the buffer
-			return buffer.concat(this.contents);
-		},
-		isEmpty: function(){
-			return !dojo.trim(this.contents);
-		},
-		clone: function(){ return this; }
-	});
-
-	dd._NodeList = dojo.extend(function(/*Node[]*/ nodes){
-		// summary: Allows us to render a group of nodes
-		this.contents = nodes || [];
-		this.last = "";
-	},
-	{
-		push: function(node){
-			// summary: Add a new node to the list
-			this.contents.push(node);
-			return this;
-		},
-		concat: function(nodes){
-			this.contents = this.contents.concat(nodes);
-			return this;
-		},
-		render: function(context, buffer){
-			// summary: Adds all content onto the buffer
-			for(var i = 0; i < this.contents.length; i++){
-				buffer = this.contents[i].render(context, buffer);
-				if(!buffer) throw new Error("Template must return buffer");
-			}
-			return buffer;
-		},
-		dummyRender: function(context){
-			return this.render(context, dd.Template.prototype.getBuffer()).toString();
-		},
-		unrender: function(){ return arguments[1]; },
-		clone: function(){ return this; },
-		rtrim: function(){
-			while(1){
-				i = this.contents.length - 1;
-				if(this.contents[i] instanceof dd._TextNode && this.contents[i].isEmpty()){
-					this.contents.pop();
-				}else{
-					break;
-				}
-			}
-
-			return this;
-		}
-	});
-
-	dd._VarNode = dojo.extend(function(str){
-		// summary: A node to be processed as a variable
-		this.contents = new dd._Filter(str);
-	},
-	{
-		render: function(context, buffer){
-			var str = this.contents.resolve(context);
-			if(!str.safe){
-				str = dd._base.escape("" + str);
-			}
-			return buffer.concat(str);
-		}
-	});
-
-	dd._noOpNode = new function(){
-		// summary: Adds a no-op node. Useful in custom tags
-		this.render = this.unrender = function(){ return arguments[1]; }
-		this.clone = function(){ return this; }
-	}
-
-	dd._Parser = dojo.extend(function(tokens){
-		// summary: Parser used during initialization and for tag groups.
-		this.contents = tokens;
-	},
-	{
-		i: 0,
-		parse: function(/*Array?*/ stop_at){
-			// summary: Turns tokens into nodes
-			// description: Steps into tags are they're found. Blocks use the parse object
-			//		to find their closing tag (the stop_at array). stop_at is inclusive, it
-			//		returns the node that matched.
-			var terminators = {};
-			stop_at = stop_at || [];
-			for(var i = 0; i < stop_at.length; i++){
-				terminators[stop_at[i]] = true;
-			}
-
-			var nodelist = new dd._NodeList();
-			while(this.i < this.contents.length){
-				token = this.contents[this.i++];
-				if(typeof token == "string"){
-					nodelist.push(new dd._TextNode(token));
-				}else{
-					var type = token[0];
-					var text = token[1];
-					if(type == dd.TOKEN_VAR){
-						nodelist.push(new dd._VarNode(text));
-					}else if(type == dd.TOKEN_BLOCK){
-						if(terminators[text]){
-							--this.i;
-							return nodelist;
-						}
-						var cmd = text.split(/\s+/g);
-						if(cmd.length){
-							cmd = cmd[0];
-							var fn = ddt.getTag(cmd);
-							if(fn){
-								nodelist.push(fn(this, new dd.Token(type, text)));
-							}
-						}
-					}
-				}
-			}
-
-			if(stop_at.length){
-				throw new Error("Could not find closing tag(s): " + stop_at.toString());
-			}
-
-			this.contents.length = 0;
-			return nodelist;
-		},
-		next_token: function(){
-			// summary: Returns the next token in the list.
-			var token = this.contents[this.i++];
-			return new dd.Token(token[0], token[1]);
-		},
-		delete_first_token: function(){
-			this.i++;
-		},
-		skip_past: function(endtag){
-			while(this.i < this.contents.length){
-				var token = this.contents[this.i++];
-				if(token[0] == dd.TOKEN_BLOCK && token[1] == endtag){
-					return;
-				}
-			}
-			throw new Error("Unclosed tag found when looking for " + endtag);
-		},
-		create_variable_node: function(expr){
-			return new dd._VarNode(expr);
-		},
-		create_text_node: function(expr){
-			return new dd._TextNode(expr || "");
-		},
-		getTemplate: function(file){
-			return new dd.Template(file);
-		}
-	});
-
-	dd.register = {
-		_registry: {
-			attributes: [],
-			tags: [],
-			filters: []
-		},
-		get: function(/*String*/ module, /*String*/ name){
-			var registry = dd.register._registry[module + "s"];
-			for(var i = 0, entry; entry = registry[i]; i++){
-				if(typeof entry[0] == "string"){
-					if(entry[0] == name){
-						return entry;
-					}
-				}else if(name.match(entry[0])){
-					return entry;
-				}
-			}
-		},
-		getAttributeTags: function(){
-			var tags = [];
-			var registry = dd.register._registry.attributes;
-			for(var i = 0, entry; entry = registry[i]; i++){
-				if(entry.length == 3){
-					tags.push(entry);
-				}else{
-					var fn = dojo.getObject(entry[1]);
-					if(fn && dojo.isFunction(fn)){
-						entry.push(fn);
-						tags.push(entry);
-					}
-				}
-			}
-			return tags;
-		},
-		_any: function(type, base, locations){
-			for(var path in locations){
-				for(var i = 0, fn; fn = locations[path][i]; i++){
-					var key = fn;
-					if(dojo.isArray(fn)){
-						key = fn[0];
-						fn = fn[1];
-					}
-					if(typeof key == "string"){
-						if(key.substr(0, 5) == "attr:"){
-							var attr = fn.toLowerCase();
-							if(attr.substr(0, 5) == "attr:"){
-								attr = attr.slice(5);
-							}
-							dd.register._registry.attributes.push([attr, base + "." + path + "." + attr]);
-						}
-						key = key.toLowerCase();
-					}
-					dd.register._registry[type].push([
-						key,
-						fn,
-						base + "." + path
-					]);
-				}
-			}
-		},
-		tags: function(/*String*/ base, /*Object*/ locations){
-			dd.register._any("tags", base, locations);
-		},
-		filters: function(/*String*/ base, /*Object*/ locations){
-			dd.register._any("filters", base, locations);
-		}
-	}
-
-	var escapeamp = /&/g;
-	var escapelt = /</g;
-	var escapegt = />/g;
-	var escapeqt = /'/g;
-	var escapedblqt = /"/g;
-	dd._base.escape = function(value){
-		// summary: Escapes a string's HTML
-		return dd.mark_safe(value.replace(escapeamp, '&amp;').replace(escapelt, '&lt;').replace(escapegt, '&gt;').replace(escapedblqt, '&quot;').replace(escapeqt, '&#39;'));
-	}
-
-	dd._base.safe = function(value){
-		if(typeof value == "string"){
-			value = new String(value);
-		}
-		if(typeof value == "object"){
-			value.safe = true;
-		}
-		return value;
-	}
-	dd.mark_safe = dd._base.safe;
-
-	dd.register.tags("dojox.dtl.tag", {
-		"date": ["now"],
-		"logic": ["if", "for", "ifequal", "ifnotequal"],
-		"loader": ["extends", "block", "include", "load", "ssi"],
-		"misc": ["comment", "debug", "filter", "firstof", "spaceless", "templatetag", "widthratio", "with"],
-		"loop": ["cycle", "ifchanged", "regroup"]
-	});
-	dd.register.filters("dojox.dtl.filter", {
-		"dates": ["date", "time", "timesince", "timeuntil"],
-		"htmlstrings": ["linebreaks", "linebreaksbr", "removetags", "striptags"],
-		"integers": ["add", "get_digit"],
-		"lists": ["dictsort", "dictsortreversed", "first", "join", "length", "length_is", "random", "slice", "unordered_list"],
-		"logic": ["default", "default_if_none", "divisibleby", "yesno"],
-		"misc": ["filesizeformat", "pluralize", "phone2numeric", "pprint"],
-		"strings": ["addslashes", "capfirst", "center", "cut", "fix_ampersands", "floatformat", "iriencode", "linenumbers", "ljust", "lower", "make_list", "rjust", "slugify", "stringformat", "title", "truncatewords", "truncatewords_html", "upper", "urlencode", "urlize", "urlizetrunc", "wordcount", "wordwrap"]
-	});
-	dd.register.filters("dojox.dtl", {
-		"_base": ["escape", "safe"]
-	});
-})();
-
-}
-
-if(!dojo._hasResource["dojox.dtl"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dojox.dtl"] = true;
-dojo.provide("dojox.dtl");
-
-
-}
-
-if(!dojo._hasResource["dojox.dtl.Context"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dojox.dtl.Context"] = true;
-dojo.provide("dojox.dtl.Context");
-
-
-dojox.dtl.Context = dojo.extend(function(dict){
-	this._this = {};
-	dojox.dtl._Context.call(this, dict);
-}, dojox.dtl._Context.prototype,
-{
-	getKeys: function(){
-		var keys = [];
-		for(var key in this){
-			if(this.hasOwnProperty(key) && key != "_dicts" && key != "_this"){
-				keys.push(key);
-			}
-		}
-		return keys;
-	},
-	extend: function(/*dojox.dtl.Context|Object*/ obj){
-		// summary: Returns a clone of this context object, with the items from the
-		//		passed objecct mixed in.
-		return  dojo.delegate(this, obj);
-	},
-	filter: function(/*dojox.dtl.Context|Object|String...*/ filter){
-		// summary: Returns a clone of this context, only containing the items
-		//		defined in the filter.
-		var context = new dojox.dtl.Context();
-		var keys = [];
-		var i, arg;
-		if(filter instanceof dojox.dtl.Context){
-			keys = filter.getKeys();
-		}else if(typeof filter == "object"){
-			for(var key in filter){
-				keys.push(key);
-			}
-		}else{
-			for(i = 0; arg = arguments[i]; i++){
-				if(typeof arg == "string"){
-					keys.push(arg);
-				}
-			}
-		}
-
-		for(i = 0, key; key = keys[i]; i++){
-			context[key] = this[key];
-		}
-
-		return context;
-	},
-	setThis: function(/*Object*/ _this){
-		this._this = _this;
-	},
-	getThis: function(){
-		return this._this;
-	},
-	hasKey: function(key){
-		if(typeof this[key] != "undefined"){
-			return true;
-		}
-
-		for(var i = 0, dict; dict = this._dicts[i]; i++){
-			if(typeof dict[key] != "undefined"){
-				return true;
-			}
-		}
-
-		return false;
-	}
-});
-
-}
-
-if(!dojo._hasResource["dojox.dtl.tag.logic"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dojox.dtl.tag.logic"] = true;
-dojo.provide("dojox.dtl.tag.logic");
-
-
-
-(function(){
-	var dd = dojox.dtl;
-	var ddt = dd.text;
-	var ddtl = dd.tag.logic;
-
-	ddtl.IfNode = dojo.extend(function(bools, trues, falses, type){
-		this.bools = bools;
-		this.trues = trues;
-		this.falses = falses;
-		this.type = type;
-	},
-	{
-		render: function(context, buffer){
-			var i, bool, ifnot, filter, value;
-			if(this.type == "or"){
-				for(i = 0; bool = this.bools[i]; i++){
-					ifnot = bool[0];
-					filter = bool[1];
-					value = filter.resolve(context);
-					if((value && !ifnot) || (ifnot && !value)){
-						if(this.falses){
-							buffer = this.falses.unrender(context, buffer);
-						}
-						return (this.trues) ? this.trues.render(context, buffer, this) : buffer;
-					}
-				}
-				if(this.trues){
-					buffer = this.trues.unrender(context, buffer);
-				}
-				return (this.falses) ? this.falses.render(context, buffer, this) : buffer;
-			}else{
-				for(i = 0; bool = this.bools[i]; i++){
-					ifnot = bool[0];
-					filter = bool[1];
-					value = filter.resolve(context);
-					// If we ever encounter a false value
-					if(value == ifnot){
-						if(this.trues){
-							buffer = this.trues.unrender(context, buffer);
-						}
-						return (this.falses) ? this.falses.render(context, buffer, this) : buffer;
-					}
-				}
-				if(this.falses){
-					buffer = this.falses.unrender(context, buffer);
-				}
-				return (this.trues) ? this.trues.render(context, buffer, this) : buffer;
-			}
-			return buffer;
-		},
-		unrender: function(context, buffer){
-			buffer = (this.trues) ? this.trues.unrender(context, buffer) : buffer;
-			buffer = (this.falses) ? this.falses.unrender(context, buffer) : buffer;
-			return buffer;
-		},
-		clone: function(buffer){
-			var trues = (this.trues) ? this.trues.clone(buffer) : null;
-			var falses = (this.falses) ? this.falses.clone(buffer) : null;
-			return new this.constructor(this.bools, trues, falses, this.type);
-		}
-	});
-
-	ddtl.IfEqualNode = dojo.extend(function(var1, var2, trues, falses, negate){
-		this.var1 = new dd._Filter(var1);
-		this.var2 = new dd._Filter(var2);
-		this.trues = trues;
-		this.falses = falses;
-		this.negate = negate;
-	},
-	{
-		render: function(context, buffer){
-			var var1 = this.var1.resolve(context);
-			var var2 = this.var2.resolve(context);
-			var1 = (typeof var1 != "undefined") ? var1 : "";
-			var2 = (typeof var1 != "undefined") ? var2 : "";
-			if((this.negate && var1 != var2) || (!this.negate && var1 == var2)){
-				if(this.falses){
-					buffer = this.falses.unrender(context, buffer, this);
-				}
-				return (this.trues) ? this.trues.render(context, buffer, this) : buffer;
-			}
-			if(this.trues){
-				buffer = this.trues.unrender(context, buffer, this);
-			}
-			return (this.falses) ? this.falses.render(context, buffer, this) : buffer;
-		},
-		unrender: function(context, buffer){
-			return ddtl.IfNode.prototype.unrender.call(this, context, buffer);
-		},
-		clone: function(buffer){
-			var trues = this.trues ? this.trues.clone(buffer) : null;
-			var falses = this.falses ? this.falses.clone(buffer) : null;
-			return new this.constructor(this.var1.getExpression(), this.var2.getExpression(), trues, falses, this.negate);
-		}
-	});
-
-	ddtl.ForNode = dojo.extend(function(assign, loop, reversed, nodelist){
-		this.assign = assign;
-		this.loop = new dd._Filter(loop);
-		this.reversed = reversed;
-		this.nodelist = nodelist;
-		this.pool = [];
-	},
-	{
-		render: function(context, buffer){
-			var i, j, k;
-			var dirty = false;
-			var assign = this.assign;
-
-			for(k = 0; k < assign.length; k++){
-				if(typeof context[assign[k]] != "undefined"){
-					dirty = true;
-					context = context.push();
-					break;
-				}
-			}
-			if(!dirty && context.forloop){
-				dirty = true;
-				context = context.push();
-			}
-
-			var items = this.loop.resolve(context) || [];
-			for(i = items.length; i < this.pool.length; i++){
-				this.pool[i].unrender(context, buffer, this);
-			}
-			if(this.reversed){
-				items = items.slice(0).reverse();
-			}
-
-			var isObject = dojo.isObject(items) && !dojo.isArrayLike(items);
-			var arred = [];
-			if(isObject){
-				for(var key in items){
-					arred.push(items[key]);
-				}
-			}else{
-				arred = items;
-			}
-
-			var forloop = context.forloop = {
-				parentloop: context.get("forloop", {})
-			};
-			var j = 0;
-			for(i = 0; i < arred.length; i++){
-				var item = arred[i];
-
-				forloop.counter0 = j;
-				forloop.counter = j + 1;
-				forloop.revcounter0 = arred.length - j - 1;
-				forloop.revcounter = arred.length - j;
-				forloop.first = !j;
-				forloop.last = (j == arred.length - 1);
-
-				if(assign.length > 1 && dojo.isArrayLike(item)){
-					if(!dirty){
-						dirty = true;
-						context = context.push();
-					}
-					var zipped = {};
-					for(k = 0; k < item.length && k < assign.length; k++){
-						zipped[assign[k]] = item[k];
-					}
-					dojo.mixin(context, zipped);
-				}else{
-					context[assign[0]] = item;
-				}
-
-				if(j + 1 > this.pool.length){
-					this.pool.push(this.nodelist.clone(buffer));
-				}
-				buffer = this.pool[j++].render(context, buffer, this);
-			}
-
-			delete context.forloop;
-			if(dirty){
-				context = context.pop();
-			}else{
-				for(k = 0; k < assign.length; k++){
-					delete context[assign[k]];
-				}
-			}
-			return buffer;
-		},
-		unrender: function(context, buffer){
-			for(var i = 0, pool; pool = this.pool[i]; i++){
-				buffer = pool.unrender(context, buffer);
-			}
-			return buffer;
-		},
-		clone: function(buffer){
-			return new this.constructor(this.assign, this.loop.getExpression(), this.reversed, this.nodelist.clone(buffer));
-		}
-	});
-
-	dojo.mixin(ddtl, {
-		if_: function(parser, token){
-			var i, part, type, bools = [], parts = token.contents.split();
-			parts.shift();
-			token = parts.join(" ");
-			parts = token.split(" and ");
-			if(parts.length == 1){
-				type = "or";
-				parts = token.split(" or ");
-			}else{
-				type = "and";
-				for(i = 0; i < parts.length; i++){
-					if(parts[i].indexOf(" or ") != -1){
-						// Note, since we split by and, this is the only place we need to error check
-						throw new Error("'if' tags can't mix 'and' and 'or'");
-					}
-				}
-			}
-			for(i = 0; part = parts[i]; i++){
-				var not = false;
-				if(part.indexOf("not ") == 0){
-					part = part.slice(4);
-					not = true;
-				}
-				bools.push([not, new dd._Filter(part)]);
-			}
-			var trues = parser.parse(["else", "endif"]);
-			var falses = false;
-			var token = parser.next_token();
-			if(token.contents == "else"){
-				falses = parser.parse(["endif"]);
-				parser.next_token();
-			}
-			return new ddtl.IfNode(bools, trues, falses, type);
-		},
-		_ifequal: function(parser, token, negate){
-			var parts = token.split_contents();
-			if(parts.length != 3){
-				throw new Error(parts[0] + " takes two arguments");
-			}
-			var end = 'end' + parts[0];
-			var trues = parser.parse(["else", end]);
-			var falses = false;
-			var token = parser.next_token();
-			if(token.contents == "else"){
-				falses = parser.parse([end]);
-				parser.next_token();
-			}
-			return new ddtl.IfEqualNode(parts[1], parts[2], trues, falses, negate);
-		},
-		ifequal: function(parser, token){
-			return ddtl._ifequal(parser, token);
-		},
-		ifnotequal: function(parser, token){
-			return ddtl._ifequal(parser, token, true);
-		},
-		for_: function(parser, token){
-			var parts = token.contents.split();
-			if(parts.length < 4){
-				throw new Error("'for' statements should have at least four words: " + token.contents);
-			}
-			var reversed = parts[parts.length - 1] == "reversed";
-			var index = (reversed) ? -3 : -2;
-			if(parts[parts.length + index] != "in"){
-				throw new Error("'for' tag received an invalid argument: " + token.contents);
-			}
-			var loopvars = parts.slice(1, index).join(" ").split(/ *, */);
-			for(var i = 0; i < loopvars.length; i++){
-				if(!loopvars[i] || loopvars[i].indexOf(" ") != -1){
-					throw new Error("'for' tag received an invalid argument: " + token.contents);
-				}
-			}
-			var nodelist = parser.parse(["endfor"]);
-			parser.next_token();
-			return new ddtl.ForNode(loopvars, parts[parts.length + index + 1], reversed, nodelist);
-		}
-	});
-})();
-
-}
-
-if(!dojo._hasResource["dojox.dtl.tag.loop"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dojox.dtl.tag.loop"] = true;
-dojo.provide("dojox.dtl.tag.loop");
-
-
-
-
-(function(){
-	var dd = dojox.dtl;
-	var ddtl = dd.tag.loop;
-
-	ddtl.CycleNode = dojo.extend(function(cyclevars, name, text, shared){
-		this.cyclevars = cyclevars;
-		this.name = name;
-		this.contents = text;
-		this.shared = shared || {counter: -1, map: {}};
-	},
-	{
-		render: function(context, buffer){
-			if(context.forloop && !context.forloop.counter0){
-				this.shared.counter = -1;
-			}
-
-			++this.shared.counter;
-			var value = this.cyclevars[this.shared.counter % this.cyclevars.length];
-
-			var map = this.shared.map;
-			if(!map[value]){
-				map[value] = new dd._Filter(value);
-			}
-			value = map[value].resolve(context, buffer);
-
-			if(this.name){
-				context[this.name] = value;
-			}
-			this.contents.set(value);
-			return this.contents.render(context, buffer);
-		},
-		unrender: function(context, buffer){
-			return this.contents.unrender(context, buffer);
-		},
-		clone: function(buffer){
-			return new this.constructor(this.cyclevars, this.name, this.contents.clone(buffer), this.shared);
-		}
-	});
-
-	ddtl.IfChangedNode = dojo.extend(function(nodes, vars, shared){
-		this.nodes = nodes;
-		this._vars = vars;
-		this.shared = shared || {last: null, counter: 0};
-		this.vars = dojo.map(vars, function(item){
-			return new dojox.dtl._Filter(item);
-		});
-	}, {
-		render: function(context, buffer){
-			if(context.forloop){
-				if(context.forloop.counter <= this.shared.counter){
-					this.shared.last = null;
-				}
-				this.shared.counter = context.forloop.counter;
-			}
-
-			var change;
-			if(this.vars.length){
-				change = dojo.toJson(dojo.map(this.vars, function(item){
-					return item.resolve(context);
-				}));
-			}else{
-				change = this.nodes.dummyRender(context, buffer);
-			}
-
-			if(change != this.shared.last){
-				var firstloop = (this.shared.last === null);
-				this.shared.last = change;
-				context = context.push();
-				context.ifchanged = {firstloop: firstloop};
-				buffer = this.nodes.render(context, buffer);
-				context = context.pop();
-			}else{
-				buffer = this.nodes.unrender(context, buffer);
-			}
-			return buffer;
-		},
-		unrender: function(context, buffer){
-			return this.nodes.unrender(context, buffer);
-		},
-		clone: function(buffer){
-			return new this.constructor(this.nodes.clone(buffer), this._vars, this.shared);
-		}
-	});
-
-	ddtl.RegroupNode = dojo.extend(function(expression, key, alias){
-		this._expression = expression;
-		this.expression = new dd._Filter(expression);
-		this.key = key;
-		this.alias = alias;
-	},
-	{
-		_push: function(container, grouper, stack){
-			if(stack.length){
-				container.push({ grouper: grouper, list: stack });
-			}
-		},
-		render: function(context, buffer){
-			context[this.alias] = [];
-			var list = this.expression.resolve(context);
-			if(list){
-				var last = null;
-				var stack = [];
-				for(var i = 0; i < list.length; i++){
-					var id = list[i][this.key];
-					if(last !== id){
-						this._push(context[this.alias], last, stack);
-						last = id;
-						stack = [list[i]];
-					}else{
-						stack.push(list[i]);
-					}
-				}
-				this._push(context[this.alias], last, stack);
-			}
-			return buffer;
-		},
-		unrender: function(context, buffer){
-			return buffer;
-		},
-		clone: function(context, buffer){
-			return this;
-		}
-	});
-
-	dojo.mixin(ddtl, {
-		cycle: function(parser, token){
-			// summary: Cycle among the given strings each time this tag is encountered
-			var args = token.split_contents();
-
-			if(args.length < 2){
-				throw new Error("'cycle' tag requires at least two arguments");
-			}
-
-			if(args[1].indexOf(",") != -1){
-				var vars = args[1].split(",");
-				args = [args[0]];
-				for(var i = 0; i < vars.length; i++){
-					args.push('"' + vars[i] + '"');
-				}
-			}
-
-			if(args.length == 2){
-				var name = args[args.length - 1];
-
-				if(!parser._namedCycleNodes){
-					throw new Error("No named cycles in template: '" + name + "' is not defined");
-				}
-				if(!parser._namedCycleNodes[name]){
-					throw new Error("Named cycle '" + name + "' does not exist");
-				}
-
-		        return parser._namedCycleNodes[name];
-			}
-
-			if(args.length > 4 && args[args.length - 2] == "as"){
-				var name = args[args.length - 1];
-
-				var node = new ddtl.CycleNode(args.slice(1, args.length - 2), name, parser.create_text_node());
-
-				if(!parser._namedCycleNodes){
-					parser._namedCycleNodes = {};
-				}
-				parser._namedCycleNodes[name] = node;
-			}else{
-				node = new ddtl.CycleNode(args.slice(1), null, parser.create_text_node());
-			}
-
-			return node;
-		},
-		ifchanged: function(parser, token){
-			var parts = token.contents.split();
-			var nodes = parser.parse(["endifchanged"]);
-			parser.delete_first_token();
-			return new ddtl.IfChangedNode(nodes, parts.slice(1));
-		},
-		regroup: function(parser, token){
-			var tokens = dojox.string.tokenize(token.contents, /(\s+)/g, function(spaces){
-				return spaces;
-			});
-			if(tokens.length < 11 || tokens[tokens.length - 3] != "as" || tokens[tokens.length - 7] != "by"){
-				throw new Error("Expected the format: regroup list by key as newList");
-			}
-			var expression = tokens.slice(2, -8).join("");
-			var key = tokens[tokens.length - 5];
-			var alias = tokens[tokens.length - 1];
-			return new ddtl.RegroupNode(expression, key, alias);
-		}
-	});
-})();
-
-}
-
-if(!dojo._hasResource["dojo.date"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dojo.date"] = true;
-dojo.provide("dojo.date");
-
-/*=====
-dojo.date = {
-	// summary: Date manipulation utilities
-}
-=====*/
-
-dojo.date.getDaysInMonth = function(/*Date*/dateObject){
-	//	summary:
-	//		Returns the number of days in the month used by 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; } // Number
-	return days[month]; // Number
-}
-
-dojo.date.isLeapYear = function(/*Date*/dateObject){
-	//	summary:
-	//		Determines if the year of the dateObject is a leap year
-	//	description:
-	//		Leap years are years with an additional day YYYY-02-29, where the
-	//		year number is a multiple of four with the following exception: If
-	//		a year is a multiple of 100, then it is only a leap year if it is
-	//		also a multiple of 400. For example, 1900 was not a leap year, but
-	//		2000 is one.
-
-	var year = dateObject.getFullYear();
-	return !(year%400) || (!(year%4) && !!(year%100)); // Boolean
-}
-
-// FIXME: This is not localized
-dojo.date.getTimezoneName = function(/*Date*/dateObject){
-	//	summary:
-	//		Get the user's time zone as provided by the browser
-	// dateObject:
-	//		Needed because the timezone may vary with time (daylight savings)
-	//	description:
-	//		Try to get time zone info from toString or toLocaleString method of
-	//		the Date object -- UTC offset is not a time zone.  See
-	//		http://www.twinsun.com/tz/tz-link.htm Note: results may be
-	//		inconsistent across browsers.
-
-	var str = dateObject.toString(); // Start looking in toString
-	var tz = ''; // The result -- return empty string if nothing found
-	var match;
-
-	// First look for something in parentheses -- fast lookup, no regex
-	var pos = str.indexOf('(');
-	if(pos > -1){
-		tz = str.substring(++pos, str.indexOf(')'));
-	}else{
-		// If at first you don't succeed ...
-		// If IE knows about the TZ, it appears before the year
-		// Capital letters or slash before a 4-digit year 
-		// at the end of string
-		var pat = /([A-Z\/]+) \d{4}$/;
-		if((match = str.match(pat))){
-			tz = match[1];
-		}else{
-		// Some browsers (e.g. Safari) glue the TZ on the end
-		// of toLocaleString instead of putting it in toString
-			str = dateObject.toLocaleString();
-			// Capital letters or slash -- end of string, 
-			// after space
-			pat = / ([A-Z\/]+)$/;
-			if((match = str.match(pat))){
-				tz = match[1];
-			}
-		}
-	}
-
-	// Make sure it doesn't somehow end up return AM or PM
-	return (tz == 'AM' || tz == 'PM') ? '' : tz; // String
-}
-
-// Utility methods to do arithmetic calculations with Dates
-
-dojo.date.compare = function(/*Date*/date1, /*Date?*/date2, /*String?*/portion){
-	//	summary:
-	//		Compare two date objects by date, time, or both.
-	//	description:
-	//  	Returns 0 if equal, positive if a > b, else negative.
-	//	date1:
-	//		Date object
-	//	date2:
-	//		Date object.  If not specified, the current Date is used.
-	//	portion:
-	//		A string indicating the "date" or "time" portion of a Date object.
-	//		Compares both "date" and "time" by default.  One of the following:
-	//		"date", "time", "datetime"
-
-	// Extra step required in copy for IE - see #3112
-	date1 = new Date(Number(date1));
-	date2 = new Date(Number(date2 || new Date()));
-
-	if(portion !== "undefined"){
-		if(portion == "date"){
-			// Ignore times and compare dates.
-			date1.setHours(0, 0, 0, 0);
-			date2.setHours(0, 0, 0, 0);
-		}else if(portion == "time"){
-			// Ignore dates and compare times.
-			date1.setFullYear(0, 0, 0);
-			date2.setFullYear(0, 0, 0);
-		}
-	}
-	
-	if(date1 > date2){ return 1; } // int
-	if(date1 < date2){ return -1; } // int
-	return 0; // int
-};
-
-dojo.date.add = function(/*Date*/date, /*String*/interval, /*int*/amount){
-	//	summary:
-	//		Add to a Date in intervals of different size, from milliseconds to years
-	//	date: Date
-	//		Date object to start with
-	//	interval:
-	//		A string representing the interval.  One of the following:
-	//			"year", "month", "day", "hour", "minute", "second",
-	//			"millisecond", "quarter", "week", "weekday"
-	//	amount:
-	//		How much to add to the date.
-
-	var sum = new Date(Number(date)); // convert to Number before copying to accomodate IE (#3112)
-	var fixOvershoot = false;
-	var property = "Date";
-
-	switch(interval){
-		case "day":
-			break;
-		case "weekday":
-			//i18n FIXME: assumes Saturday/Sunday weekend, but this is not always true.  see dojo.cldr.supplemental
-
-			// Divide the increment time span into weekspans plus leftover days
-			// e.g., 8 days is one 5-day weekspan / and two leftover days
-			// Can't have zero leftover days, so numbers divisible by 5 get
-			// a days value of 5, and the remaining days make up the number of weeks
-			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);
-			}
-			// Get weekday value for orig date param
-			var strt = date.getDay();
-			// Orig date is Sat / positive incrementer
-			// Jump over Sun
-			var adj = 0;
-			if(strt == 6 && amount > 0){
-				adj = 1;
-			}else if(strt == 0 && amount < 0){
-			// Orig date is Sun / negative incrementer
-			// Jump back over Sat
-				adj = -1;
-			}
-			// Get weekday val for the new date
-			var trgt = strt + days;
-			// New date is on Sat or Sun
-			if(trgt == 0 || trgt == 6){
-				adj = (amount > 0) ? 2 : -2;
-			}
-			// Increment by number of weeks plus leftover days plus
-			// weekend adjustments
-			amount = (7 * weeks) + days + adj;
-			break;
-		case "year":
-			property = "FullYear";
-			// Keep increment/decrement from 2/29 out of March
-			fixOvershoot = true;
-			break;
-		case "week":
-			amount *= 7;
-			break;
-		case "quarter":
-			// Naive quarter is just three months
-			amount *= 3;
-			// fallthrough...
-		case "month":
-			// Reset to last day of month if you overshoot
-			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; // Date
-};
-
-dojo.date.difference = function(/*Date*/date1, /*Date?*/date2, /*String?*/interval){
-	//	summary:
-	//		Get the difference in a specific unit of time (e.g., number of
-	//		months, weeks, days, etc.) between two dates, rounded to the
-	//		nearest integer.
-	//	date1:
-	//		Date object
-	//	date2:
-	//		Date object.  If not specified, the current Date is used.
-	//	interval:
-	//		A string representing the interval.  One of the following:
-	//			"year", "month", "day", "hour", "minute", "second",
-	//			"millisecond", "quarter", "week", "weekday"
-	//		Defaults to "day".
-
-	date2 = date2 || new Date();
-	interval = interval || "day";
-	var yearDiff = date2.getFullYear() - date1.getFullYear();
-	var delta = 1; // Integer return value
-
-	switch(interval){
-		case "quarter":
-			var m1 = date1.getMonth();
-			var m2 = date2.getMonth();
-			// Figure out which quarter the months are in
-			var q1 = Math.floor(m1/3) + 1;
-			var q2 = Math.floor(m2/3) + 1;
-			// Add quarters for any year difference between the dates
-			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;
-
-			// Even number of weeks
-			if(mod == 0){
-				days = weeks*5;
-			}else{
-				// Weeks plus spare change (< 7 days)
-				var adj = 0;
-				var aDay = date1.getDay();
-				var bDay = date2.getDay();
-
-				weeks = parseInt(days/7);
-				mod = days % 7;
-				// Mark the date advanced by the number of
-				// round weeks (may be zero)
-				var dtMark = new Date(date1);
-				dtMark.setDate(dtMark.getDate()+(weeks*7));
-				var dayMark = dtMark.getDay();
-
-				// Spare change days -- 6 or less
-				if(days > 0){
-					switch(true){
-						// Range starts on Sat
-						case aDay == 6:
-							adj = -1;
-							break;
-						// Range starts on Sun
-						case aDay == 0:
-							adj = 0;
-							break;
-						// Range ends on Sat
-						case bDay == 6:
-							adj = -1;
-							break;
-						// Range ends on Sun
-						case bDay == 0:
-							adj = -2;
-							break;
-						// Range contains weekend
-						case (dayMark + mod) > 5:
-							adj = -2;
-					}
-				}else if(days < 0){
-					switch(true){
-						// Range starts on Sat
-						case aDay == 6:
-							adj = 0;
-							break;
-						// Range starts on Sun
-						case aDay == 0:
-							adj = 1;
-							break;
-						// Range ends on Sat
-						case bDay == 6:
-							adj = 2;
-							break;
-						// Range ends on Sun
-						case bDay == 0:
-							adj = 1;
-							break;
-						// Range contains weekend
-						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":
-			// Truncate instead of rounding
-			// Don't use Math.floor -- value may be negative
-			delta = parseInt(dojo.date.difference(date1, date2, "day")/7);
-			break;
-		case "day":
-			delta /= 24;
-			// fallthrough
-		case "hour":
-			delta /= 60;
-			// fallthrough
-		case "minute":
-			delta /= 60;
-			// fallthrough
-		case "second":
-			delta /= 1000;
-			// fallthrough
-		case "millisecond":
-			delta *= date2.getTime() - date1.getTime();
-	}
-
-	// Round for fractional values and DST leaps
-	return Math.round(delta); // Number (integer)
-};
-
-}
-
-if(!dojo._hasResource["dojox.date.php"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dojox.date.php"] = true;
-dojo.provide("dojox.date.php");
-
-
-
-dojox.date.php.format = function(/*Date*/ date, /*String*/ format){
-	// summary: Get a formatted string for a given date object
-	var df = new dojox.date.php.DateFormat(format);
-	return df.format(date);	
-}
-
-dojox.date.php.DateFormat = function(/*String*/ format){
-	// summary: Format the internal date object
-	if(!this.regex){
-		var keys = [];
-		for(var key in this.constructor.prototype){
-			if(dojo.isString(key) && key.length == 1 && dojo.isFunction(this[key])){
-				keys.push(key);
-			}
-		}
-		this.constructor.prototype.regex = new RegExp("(?:(\\\\.)|([" + keys.join("") + "]))", "g");
-	}
-
-	var replacements = [];
-
-	this.tokens = dojox.string.tokenize(format, this.regex, function(escape, token, i){
-		if(token){
-			replacements.push([i, token]);
-			return token;
-		}
-		if(escape){
-			return escape.charAt(1);
-		}
-	});
-
-	this.replacements = replacements;
-}
-dojo.extend(dojox.date.php.DateFormat, {
-	weekdays: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
-	weekdays_3: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
-	months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
-	months_3: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"],
-	monthdays: [31,28,31,30,31,30,31,31,30,31,30,31],
-
-	format: function(/*Date*/ date){
-		this.date = date;
-		for(var i = 0, replacement; replacement = this.replacements[i]; i++){
-			this.tokens[replacement[0]] = this[replacement[1]]();
-		}
-		return this.tokens.join("");
-	},
-
-	// Day
-
-	d: function(){
-		// summary: Day of the month, 2 digits with leading zeros
-		var j = this.j();
-		return (j.length == 1) ? "0" + j : j;
-	},
-
-	D: function(){
-		// summary: A textual representation of a day, three letters
-		return this.weekdays_3[this.date.getDay()];
-	},
-
-	j: function(){
-		// summary: Day of the month without leading zeros
-		return this.date.getDate() + "";
-	},
-
-	l: function(){
-		// summary: A full textual representation of the day of the week
-		return this.weekdays[this.date.getDay()];
-	},
-	
-	N: function(){
-		// summary: ISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)
-		var w = this.w();
-		return (!w) ? 7 : w;
-	},
-
-	S: function(){
-		// summary: English ordinal suffix for the day of the month, 2 characters
-		switch(this.date.getDate()){
-			case 11: case 12: case 13: return "th";
-			case 1: case 21: case 31: return "st";
-			case 2: case 22: return "nd";
-			case 3: case 23: return "rd";
-			default: return "th";
-		}
-	},
-
-	w: function(){
-		// summary: Numeric representation of the day of the week
-		return this.date.getDay() + "";
-	},
-
-	z: function(){
-		// summary: The day of the year (starting from 0)
-		var millis = this.date.getTime() - new Date(this.date.getFullYear(), 0, 1).getTime();
-		return Math.floor(millis/86400000) + "";
-	},
-
-	// Week
-
-	W: function(){
-		// summary: ISO-8601 week number of year, weeks starting on Monday (added in PHP 4.1.0)
-		var week;
-		var jan1_w = new Date(this.date.getFullYear(), 0, 1).getDay() + 1;
-		var w = this.date.getDay() + 1;
-		var z = parseInt(this.z());
-
-		if(z <= (8 - jan1_w) && jan1_w > 4){
-			var last_year = new Date(this.date.getFullYear() - 1, this.date.getMonth(), this.date.getDate());
-			if(jan1_w == 5 || (jan1_w == 6 && dojo.date.isLeapYear(last_year))){
-				week = 53;
-			}else{
-				week = 52;
-			}
-		}else{
-			var i;
-			if(Boolean(this.L())){
-				i = 366;
-			}else{
-				i = 365;
-			}
-			if((i - z) < (4 - w)){
-				week = 1;
-			}else{
-				var j = z + (7 - w) + (jan1_w - 1);
-				week = Math.ceil(j / 7);
-				if(jan1_w > 4){
-					--week;
-				}
-			}
-		}
-		
-		return week;
-	},
-
-	// Month
-
-	F: function(){
-		// summary: A full textual representation of a month, such as January or March
-		return this.months[this.date.getMonth()];
-	},
-
-	m: function(){
-		// summary: Numeric representation of a month, with leading zeros
-		var n = this.n();
-		return (n.length == 1) ? "0" + n : n;
-	},
-
-	M: function(){
-		// summary: A short textual representation of a month, three letters
-		return this.months_3[this.date.getMonth()];
-	},
-
-	n: function(){
-		// summary: Numeric representation of a month, without leading zeros
-		return this.date.getMonth() + 1 + "";
-	},
-
-	t: function(){
-		// summary: Number of days in the given month
-		return (Boolean(this.L()) && this.date.getMonth() == 1) ? 29 : this.monthdays[this.getMonth()];
-	},
-
-	// Year
-
-	L: function(){
-		// summary: Whether it's a leap year
-		return (dojo.date.isLeapYear(this.date)) ? "1" : "0";
-	},
-
-	o: function(){
-		// summary:
-		//		ISO-8601 year number. This has the same value as Y, except that if
-		//		the ISO week number (W) belongs to the previous or next year, that year is used instead. (added in PHP 5.1.0)
-		// TODO: Figure out what this means
-	},
-
-	Y: function(){
-		// summary: A full numeric representation of a year, 4 digits
-		return this.date.getFullYear() + "";
-	},
-
-	y: function(){
-		// summary: A two digit representation of a year
-		return this.Y().slice(-2);
-	},
-
-	// Time
-
-	a: function(){
-		// summary: Lowercase Ante meridiem and Post meridiem
-		return this.date.getHours() >= 12 ? "pm" : "am";
-	},
-
-	b: function(){
-		// summary: Uppercase Ante meridiem and Post meridiem
-		return this.a().toUpperCase();
-	},
-
-	B: function(){
-		// summary:
-		//	Swatch Internet time
-		//	A day is 1,000 beats. All time is measured from GMT + 1
-		var off = this.date.getTimezoneOffset() + 60;
-		var secs = (this.date.getHours() * 3600) + (this.date.getMinutes() * 60) + this.getSeconds() + (off * 60);
-		var beat = Math.abs(Math.floor(secs / 86.4) % 1000) + "";
-		while(beat.length <  2) beat = "0" + beat;
-		return beat;
-	},
-
-	g: function(){
-		// summary: 12-hour format of an hour without leading zeros
-		return (this.date.getHours() > 12) ? this.date.getHours() - 12 + "" : this.date.getHours() + "";
-	},
-
-	G: function(){
-		// summary: 24-hour format of an hour without leading zeros
-		return this.date.getHours() + "";
-	},
-
-	h: function(){
-		// summary: 12-hour format of an hour with leading zeros
-		var g = this.g();
-		return (g.length == 1) ? "0" + g : g;
-	},
-
-	H: function(){
-		// summary: 24-hour format of an hour with leading zeros
-		var G = this.G();
-		return (G.length == 1) ? "0" + G : G;
-	},
-
-	i: function(){
-		// summary: Minutes with leading zeros
-		var mins = this.date.getMinutes() + "";
-		return (mins.length == 1) ? "0" + mins : mins;
-	},
-
-	s: function(){
-		// summary: Seconds, with leading zeros
-		var secs = this.date.getSeconds() + "";
-		return (secs.length == 1) ? "0" + secs : secs;
-	},
-
-	// Timezone
-
-	e: function(){
-		// summary: Timezone identifier (added in PHP 5.1.0)
-		return dojo.date.getTimezoneName(this.date);
-	},
-
-	I: function(){
-		// summary: Whether or not the date is in daylight saving time
-		// TODO: Can dojo.date do this?
-	},
-
-	O: function(){
-		// summary: Difference to Greenwich time (GMT) in hours
-		var off = Math.abs(this.date.getTimezoneOffset());
-		var hours = Math.floor(off / 60) + "";
-		var mins = (off % 60) + "";
-		if(hours.length == 1) hours = "0" + hours;
-		if(mins.length == 1) hours = "0" + mins;
-		return ((this.date.getTimezoneOffset() < 0) ? "+" : "-") + hours + mins;
-	},
-
-	P: function(){
-		// summary: Difference to Greenwich time (GMT) with colon between hours and minutes (added in PHP 5.1.3)
-		var O = this.O();
-		return O.substring(0, 2) + ":" + O.substring(2, 4);
-	},
-
-	T: function(){
-		// summary: Timezone abbreviation
-
-		// Guess...
-		return this.e().substring(0, 3);
-	},
-
-	Z: function(){
-		// summary:
-		//		Timezone offset in seconds. The offset for timezones west of UTC is always negative,
-		//		and for those east of UTC is always positive.
-		return this.date.getTimezoneOffset() * -60;
-	},
-
-	// Full Date/Time
-
-	c: function(){
-		// summary: ISO 8601 date (added in PHP 5)
-		return this.Y() + "-" + this.m() + "-" + this.d() + "T" + this.h() + ":" + this.i() + ":" + this.s() + this.P();
-	},
-
-	r: function(){
-		// summary: RFC 2822 formatted date
-		return this.D() + ", " + this.d() + " " + this.M() + " " + this.Y() + " " + this.H() + ":" + this.i() + ":" + this.s() + " " + this.O();
-	},
-
-	U: function(){
-		// summary: Seconds since the Unix Epoch (January 1 1970 00:00:00 GMT)
-		return Math.floor(this.date.getTime() / 1000);
-	}
-
-});
-
-}
-
-if(!dojo._hasResource["dojox.dtl.utils.date"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dojox.dtl.utils.date"] = true;
-dojo.provide("dojox.dtl.utils.date");
-
-
-
-dojox.dtl.utils.date.DateFormat = function(/*String*/ format){
-	dojox.date.php.DateFormat.call(this, format);
-}
-dojo.extend(dojox.dtl.utils.date.DateFormat, dojox.date.php.DateFormat.prototype, {
-	f: function(){
-		// summary:
-		//		Time, in 12-hour hours and minutes, with minutes left off if they're zero.
-		// description: 
-		//		Examples: '1', '1:30', '2:05', '2'
-		//		Proprietary extension.
-		return (!this.date.getMinutes()) ? this.g() : this.g() + ":" + this.i();
-	},
-	N: function(){
-		// summary: Month abbreviation in Associated Press style. Proprietary extension.
-		return dojox.dtl.utils.date._months_ap[this.date.getMonth()];
-	},
-	P: function(){
-		// summary:
-		//		Time, in 12-hour hours, minutes and 'a.m.'/'p.m.', with minutes left off
-		//		if they're zero and the strings 'midnight' and 'noon' if appropriate.
-		// description:
-		//		Examples: '1 a.m.', '1:30 p.m.', 'midnight', 'noon', '12:30 p.m.'
-		//		Proprietary extension.
-		if(!this.date.getMinutes() && !this.date.getHours()){
-			return 'midnight';
-		}
-		if(!this.date.getMinutes() && this.date.getHours() == 12){
-			return 'noon';
-		}
-		return this.f() + " " + this.a();
-	}
-});
-
-dojo.mixin(dojox.dtl.utils.date, {
-	format: function(/*Date*/ date, /*String*/ format){
-		var df = new dojox.dtl.utils.date.DateFormat(format);
-		return df.format(date);
-	},
-	timesince: function(d, now){
-		// summary:
-		//		Takes two datetime objects and returns the time between then and now
-		//		as a nicely formatted string, e.g "10 minutes"
-		// description:
-		//		Adapted from http://blog.natbat.co.uk/archive/2003/Jun/14/time_since
-		if(!(d instanceof Date)){
-			d = new Date(d.year, d.month, d.day);
-		}
-		if(!now){
-			now = new Date();
-		}
-
-		var delta = Math.abs(now.getTime() - d.getTime());
-		for(var i = 0, chunk; chunk = dojox.dtl.utils.date._chunks[i]; i++){
-			var count = Math.floor(delta / chunk[0]);
-			if(count) break;
-		}
-		return count + " " + chunk[1](count);
-	},
-	_chunks: [
-		[60 * 60 * 24 * 365 * 1000, function(n){ return (n == 1) ? 'year' : 'years'; }],
-		[60 * 60 * 24 * 30 * 1000, function(n){ return (n == 1) ? 'month' : 'months'; }],
-		[60 * 60 * 24 * 7 * 1000, function(n){ return (n == 1) ? 'week' : 'weeks'; }],
-		[60 * 60 * 24 * 1000, function(n){ return (n == 1) ? 'day' : 'days'; }],
-		[60 * 60 * 1000, function(n){ return (n == 1) ? 'hour' : 'hours'; }],
-		[60 * 1000, function(n){ return (n == 1) ? 'minute' : 'minutes'; }]
-	],
-	_months_ap: ["Jan.", "Feb.", "March", "April", "May", "June", "July", "Aug.", "Sept.", "Oct.", "Nov.", "Dec."]
-});
-
-}
-
-if(!dojo._hasResource["dojox.dtl.tag.date"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dojox.dtl.tag.date"] = true;
-dojo.provide("dojox.dtl.tag.date");
-
-
-
-
-dojox.dtl.tag.date.NowNode = function(format, node){
-	this._format = format;
-	this.format = new dojox.dtl.utils.date.DateFormat(format);
-	this.contents = node;
-}
-dojo.extend(dojox.dtl.tag.date.NowNode, {
-	render: function(context, buffer){
-		this.contents.set(this.format.format(new Date()));
-		return this.contents.render(context, buffer);
-	},
-	unrender: function(context, buffer){
-		return this.contents.unrender(context, buffer);
-	},
-	clone: function(buffer){
-		return new this.constructor(this._format, this.contents.clone(buffer));
-	}
-});
-
-dojox.dtl.tag.date.now = function(parser, token){
-	// Split by either :" or :'
-	var parts = token.split_contents();
-	if(parts.length != 2){
-		throw new Error("'now' statement takes one argument");
-	}
-	return new dojox.dtl.tag.date.NowNode(parts[1].slice(1, -1), parser.create_text_node());
-}
-
-}
-
-if(!dojo._hasResource["dojox.dtl.tag.loader"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dojox.dtl.tag.loader"] = true;
-dojo.provide("dojox.dtl.tag.loader");
-
-
-
-(function(){
-	var dd = dojox.dtl;
-	var ddtl = dd.tag.loader;
-
-	ddtl.BlockNode = dojo.extend(function(name, nodelist){
-		this.name = name;
-		this.nodelist = nodelist; // Can be overridden
-	},
-	{
-		"super": function(){
-			if(this.parent){
-				var html = this.parent.nodelist.dummyRender(this.context, null, true);
-				if(typeof html == "string"){
-					html = new String(html);
-				}
-				html.safe = true;
-				return html;
-			}
-			return '';
-		},
-		render: function(context, buffer){
-			var name = this.name;
-			var nodelist = this.nodelist;
-			var parent;
-			if(buffer.blocks){
-				var block = buffer.blocks[name];
-				if(block){
-					parent = block.parent;
-					nodelist = block.nodelist;
-					block.used = true;
-				}
-			}
-
-			this.rendered = nodelist;
-
-			context = context.push();
-			this.context = context;
-			this.parent = null;
-			if(nodelist != this.nodelist){
-				this.parent = this;
-			}
-			context.block = this;
-
-			if(buffer.getParent){
-				var bufferParent = buffer.getParent();
-				var setParent = dojo.connect(buffer, "onSetParent", function(node, up, root){
-					if(up && root){
-						buffer.setParent(bufferParent);
-					}
-				});
-			}
-			buffer = nodelist.render(context, buffer, this);
-			setParent && dojo.disconnect(setParent);
-			context = context.pop();
-			return buffer;
-		},
-		unrender: function(context, buffer){
-			return this.rendered.unrender(context, buffer);
-		},
-		clone: function(buffer){
-			return new this.constructor(this.name, this.nodelist.clone(buffer));
-		},
-		toString: function(){ return "dojox.dtl.tag.loader.BlockNode"; }
-	});
-
-	ddtl.ExtendsNode = dojo.extend(function(getTemplate, nodelist, shared, parent, key){
-		this.getTemplate = getTemplate;
-		this.nodelist = nodelist;
-		this.shared = shared;
-		this.parent = parent;
-		this.key = key;
-	},
-	{
-		parents: {},
-		getParent: function(context){
-			var parent = this.parent;
-			if(!parent){
-				var string;
-				parent = this.parent = context.get(this.key, false);
-				if(!parent){
-					throw new Error("extends tag used a variable that did not resolve");
-				}
-				if(typeof parent == "object"){
-					var url = parent.url || parent.templatePath;
-					if(parent.shared){
-						this.shared = true;
-					}
-					if(url){
-						parent = this.parent = url.toString();
-					}else if(parent.templateString){
-						// Allow the builder's string interning to work
-						string = parent.templateString;
-						parent = this.parent = " ";
-					}else{
-						parent = this.parent = this.parent.toString();
-					}
-				}
-				if(parent && parent.indexOf("shared:") === 0){
-					this.shared = true;
-					parent = this.parent = parent.substring(7, parent.length);
-				}
-			}
-			if(!parent){
-				throw new Error("Invalid template name in 'extends' tag.");
-			}
-			if(parent.render){
-				return parent;
-			}
-			if(this.parents[parent]){
-				return this.parents[parent];
-			}
-			this.parent = this.getTemplate(string || dojox.dtl.text.getTemplateString(parent));
-			if(this.shared){
-				this.parents[parent] = this.parent;
-			}
-			return this.parent;
-		},
-		render: function(context, buffer){
-			var parent = this.getParent(context);
-
-			parent.blocks = parent.blocks || {};
-			buffer.blocks = buffer.blocks || {};
-
-			for(var i = 0, node; node = this.nodelist.contents[i]; i++){
-				if(node instanceof dojox.dtl.tag.loader.BlockNode){
-					var old = parent.blocks[node.name];
-					if(old && old.nodelist != node.nodelist){
-						// In a shared template, the individual blocks might change
-						buffer = old.nodelist.unrender(context, buffer);
-					}
-					parent.blocks[node.name] = buffer.blocks[node.name] = {
-						shared: this.shared,
-						nodelist: node.nodelist,
-						used: false
-					}
-				}
-			}
-
-			this.rendered = parent;
-			return parent.nodelist.render(context, buffer, this);
-		},
-		unrender: function(context, buffer){
-			return this.rendered.unrender(context, buffer, this);
-		},
-		toString: function(){ return "dojox.dtl.block.ExtendsNode"; }
-	});
-
-	ddtl.IncludeNode = dojo.extend(function(path, constant, getTemplate, text, parsed){
-		this._path = path;
-		this.constant = constant;
-		this.path = (constant) ? path : new dd._Filter(path);
-		this.getTemplate = getTemplate;
-		this.text = text;
-		this.parsed = (arguments.length == 5) ? parsed : true;
-	},
-	{
-		_cache: [{}, {}],
-		render: function(context, buffer){
-			var location = ((this.constant) ? this.path : this.path.resolve(context)).toString();
-			var parsed = Number(this.parsed);
-			var dirty = false;
-			if(location != this.last){
-				dirty = true;
-				if(this.last){
-					buffer = this.unrender(context, buffer);
-				}
-				this.last = location;
-			}
-
-			var cache = this._cache[parsed];
-
-			if(parsed){
-				if(!cache[location]){
-					cache[location] = dd.text._resolveTemplateArg(location, true);
-				}
-				if(dirty){
-					var template = this.getTemplate(cache[location]);
-					this.rendered = template.nodelist;
-				}
-				return this.rendered.render(context, buffer, this);
-			}else{
-				if(this.text instanceof dd._TextNode){
-					if(dirty){
-						this.rendered = this.text;
-						this.rendered.set(dd.text._resolveTemplateArg(location, true));
-					}
-					return this.rendered.render(context, buffer);
-				}else{
-					if(!cache[location]){
-						var nodelist = [];
-						var div = document.createElement("div");
-						div.innerHTML = dd.text._resolveTemplateArg(location, true);
-						var children = div.childNodes;
-						while(children.length){
-							var removed = div.removeChild(children[0]);
-							nodelist.push(removed);
-						}
-						cache[location] = nodelist;
-					}
-					if(dirty){
-						this.nodelist = [];
-						var exists = true;
-						for(var i = 0, child; child = cache[location][i]; i++){
-							this.nodelist.push(child.cloneNode(true));
-						}
-					}
-					for(var i = 0, node; node = this.nodelist[i]; i++){
-						buffer = buffer.concat(node);
-					}
-				}
-			}
-			return buffer;
-		},
-		unrender: function(context, buffer){
-			if(this.rendered){
-				buffer = this.rendered.unrender(context, buffer);
-			}
-			if(this.nodelist){
-				for(var i = 0, node; node = this.nodelist[i]; i++){
-					buffer = buffer.remove(node);
-				}
-			}
-			return buffer;
-		},
-		clone: function(buffer){
-			return new this.constructor(this._path, this.constant, this.getTemplate, this.text.clone(buffer), this.parsed);
-		}
-	});
-
-	dojo.mixin(ddtl, {
-		block: function(parser, token){
-			var parts = token.contents.split();
-			var name = parts[1];
-
-			parser._blocks = parser._blocks || {};
-			parser._blocks[name] = parser._blocks[name] || [];
-			parser._blocks[name].push(name);
-
-			var nodelist = parser.parse(["endblock", "endblock " + name]).rtrim();
-			parser.next_token();
-			return new dojox.dtl.tag.loader.BlockNode(name, nodelist);
-		},
-		extends_: function(parser, token){
-			var parts = token.contents.split();
-			var shared = false;
-			var parent = null;
-			var key = null;
-			if(parts[1].charAt(0) == '"' || parts[1].charAt(0) == "'"){
-				parent = parts[1].substring(1, parts[1].length - 1);
-			}else{
-				key = parts[1];
-			}
-			if(parent && parent.indexOf("shared:") == 0){
-				shared = true;
-				parent = parent.substring(7, parent.length);
-			}
-			var nodelist = parser.parse();
-			return new dojox.dtl.tag.loader.ExtendsNode(parser.getTemplate, nodelist, shared, parent, key);
-		},
-		include: function(parser, token){
-			var parts = token.contents.split();
-			if(parts.length != 2){
-				throw new Error(parts[0] + " tag takes one argument: the name of the template to be included");
-			}
-			var path = parts[1];
-			var constant = false;
-			if((path.charAt(0) == '"' || path.slice(-1) == "'") && path.charAt(0) == path.slice(-1)){
-				path = path.slice(1, -1);
-				constant = true;
-			}
-			return new ddtl.IncludeNode(path, constant, parser.getTemplate, parser.create_text_node());
-		},
-		ssi: function(parser, token){
-			// We're going to treat things a little differently here.
-			// First of all, this tag is *not* portable, so I'm not
-			// concerned about it being a "drop in" replacement.
-
-			// Instead, we'll just replicate the include tag, but with that
-			// optional "parsed" parameter.
-			var parts = token.contents.split();
-			var parsed = false;
-			if(parts.length == 3){
-				parsed = (parts.pop() == "parsed");
-				if(!parsed){
-					throw new Error("Second (optional) argument to ssi tag must be 'parsed'");
-				}
-			}
-			var node = ddtl.include(parser, new dd.Token(token.token_type, parts.join(" ")));
-			node.parsed = parsed;
-			return node;
-		}
-	});
-})();
-
-}
-
-if(!dojo._hasResource["dojox.dtl.tag.misc"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dojox.dtl.tag.misc"] = true;
-dojo.provide("dojox.dtl.tag.misc");
-
-
-(function(){
-	var dd = dojox.dtl;
-	var ddtm = dd.tag.misc;
-
-	ddtm.DebugNode = dojo.extend(function(text){
-		this.text = text;
-	},
-	{
-		render: function(context, buffer){
-			var keys = context.getKeys();
-			var debug = [];
-			var only = {};
-			for(var i = 0, key; key = keys[i]; i++){
-				only[key] = context[key];
-				debug += "[" + key + ": " + typeof context[key] + "]\n";
-			}
-			
-			return this.text.set(debug).render(context, buffer, this);
-		},
-		unrender: function(context, buffer){
-			return buffer;
-		},
-		clone: function(buffer){
-			return new this.constructor(this.text.clone(buffer));
-		},
-		toString: function(){ return "ddtm.DebugNode"; }
-	});
-
-	ddtm.FilterNode = dojo.extend(function(varnode, nodelist){
-		this._varnode = varnode;
-		this._nodelist = nodelist;
-	},
-	{
-		render: function(context, buffer){
-			// Doing this in HTML requires a different buffer with a fake root node
-			var output = this._nodelist.render(context, new dojox.string.Builder());
-			context = context.update({ "var": output.toString() });
-			var filtered = this._varnode.render(context, buffer);
-			context = context.pop();
-			return buffer;
-		},
-		unrender: function(context, buffer){
-			return buffer;
-		},
-		clone: function(buffer){
-			return new this.constructor(this._expression, this._nodelist.clone(buffer));
-		}
-	});
-
-	ddtm.FirstOfNode = dojo.extend(function(vars, text){
-		this._vars = vars;
-		this.vars = dojo.map(vars, function(item){
-			return new dojox.dtl._Filter(item);
-		});
-		this.contents = text;
-	},
-	{
-		render: function(context, buffer){
-			for(var i = 0, item; item = this.vars[i]; i++){
-				var resolved = item.resolve(context);
-				if(typeof resolved != "undefined"){
-					if(resolved === null){
-						resolved = "null";
-					}
-					this.contents.set(resolved);
-					return this.contents.render(context, buffer);
-				}
-			}
-			return this.contents.unrender(context, buffer);
-		},
-		unrender: function(context, buffer){
-			return this.contents.unrender(context, buffer);
-		},
-		clone: function(buffer){
-			return new this.constructor(this._vars, this.contents.clone(buffer));
-		}
-	});
-
-	ddtm.SpacelessNode = dojo.extend(function(nodelist, text){
-		this.nodelist = nodelist;
-		this.contents = text;
-	},
-	{
-		render: function(context, buffer){
-			if(buffer.getParent){
-				// Unfortunately, we have to branch here
-				var watch = [
-					dojo.connect(buffer, "onAddNodeComplete", this, "_watch"),
-					dojo.connect(buffer, "onSetParent", this, "_watchParent")
-				];
-				buffer = this.nodelist.render(context, buffer);
-				dojo.disconnect(watch[0]);
-				dojo.disconnect(watch[1]);
-			}else{
-				var value = this.nodelist.dummyRender(context);
-				this.contents.set(value.replace(/>\s+</g, '><'));
-				buffer = this.contents.render(context, buffer);
-			}
-			return buffer;
-		},
-		unrender: function(context, buffer){
-			return this.nodelist.unrender(context, buffer);
-		},
-		clone: function(buffer){
-			return new this.constructor(this.nodelist.clone(buffer), this.contents.clone(buffer));
-		},
-		_isEmpty: function(node){
-			return (node.nodeType == 3 && !node.data.match(/[^\s\n]/));
-		},
-		_watch: function(node){
-			if(this._isEmpty(node)){
-				var remove = false;
-				if(node.parentNode.firstChild == node){
-					node.parentNode.removeChild(node);
-				}
-			}else{
-				var children = node.parentNode.childNodes;
-				if(node.nodeType == 1 && children.length > 2){
-					for(var i = 2, child; child = children[i]; i++){
-						if(children[i - 2].nodeType == 1 && this._isEmpty(children[i - 1])){
-							node.parentNode.removeChild(children[i - 1]);
-							return;
-						}
-					}
-				}
-			}
-		},
-		_watchParent: function(node){
-			var children = node.childNodes;
-			if(children.length){
-				while(node.childNodes.length){
-					var last = node.childNodes[node.childNodes.length - 1];
-					if(!this._isEmpty(last)){
-						return;
-					}
-					node.removeChild(last);
-				}
-			}
-		}
-	});
-
-	ddtm.TemplateTagNode = dojo.extend(function(tag, text){
-		this.tag = tag;
-		this.contents = text;
-	},
-	{
-		mapping: {
-			openblock: "{%",
-			closeblock: "%}",
-			openvariable: "{{",
-			closevariable: "}}",
-			openbrace: "{",
-			closebrace: "}",
-			opencomment: "{#",
-			closecomment: "#}"
-		},
-		render: function(context, buffer){
-			this.contents.set(this.mapping[this.tag]);
-			return this.contents.render(context, buffer);
-		},
-		unrender: function(context, buffer){
-			return this.contents.unrender(context, buffer);
-		},
-		clone: function(buffer){
-			return new this.constructor(this.tag, this.contents.clone(buffer));
-		}
-	});
-
-	ddtm.WidthRatioNode = dojo.extend(function(current, max, width, text){
-		this.current = new dd._Filter(current);
-		this.max = new dd._Filter(max);
-		this.width = width;
-		this.contents = text;
-	},
-	{
-		render: function(context, buffer){
-			var current = +this.current.resolve(context);
-			var max = +this.max.resolve(context);
-			if(typeof current != "number" || typeof max != "number" || !max){
-				this.contents.set("");
-			}else{
-				this.contents.set("" + Math.round((current / max) * this.width));
-			}
-			return this.contents.render(context, buffer);
-		},
-		unrender: function(context, buffer){
-			return this.contents.unrender(context, buffer);
-		},
-		clone: function(buffer){
-			return new this.constructor(this.current.getExpression(), this.max.getExpression(), this.width, this.contents.clone(buffer));
-		}
-	});
-
-	ddtm.WithNode = dojo.extend(function(target, alias, nodelist){
-		this.target = new dd._Filter(target);
-		this.alias = alias;
-		this.nodelist = nodelist;
-	},
-	{
-		render: function(context, buffer){
-			var target = this.target.resolve(context);
-			context = context.push();
-			context[this.alias] = target;
-			buffer = this.nodelist.render(context, buffer);
-			context = context.pop();
-			return buffer;
-		},
-		unrender: function(context, buffer){
-			return buffer;
-		},
-		clone: function(buffer){
-			return new this.constructor(this.target.getExpression(), this.alias, this.nodelist.clone(buffer));
-		}
-	});
-
-	dojo.mixin(ddtm, {
-		comment: function(parser, token){
-			// summary: Ignore everything between {% comment %} and {% endcomment %}
-			parser.skip_past("endcomment");
-			return dd._noOpNode;
-		},
-		debug: function(parser, token){
-			// summary: Output the current context, maybe add more stuff later.
-			return new ddtm.DebugNode(parser.create_text_node());
-		},
-		filter: function(parser, token){
-			// summary: Filter the contents of the blog through variable filters.
-			var rest = token.contents.split(null, 1)[1];
-			var varnode = parser.create_variable_node("var|" + rest);
-			var nodelist = parser.parse(["endfilter"]);
-			parser.next_token();
-			return new ddtm.FilterNode(varnode, nodelist);
-		},
-		firstof: function(parser, token){
-			var parts = token.split_contents().slice(1);
-			if(!parts.length){
-				throw new Error("'firstof' statement requires at least one argument");
-			}
-			return new ddtm.FirstOfNode(parts, parser.create_text_node());
-		},
-		spaceless: function(parser, token){
-			var nodelist = parser.parse(["endspaceless"]);
-			parser.delete_first_token();
-			return new ddtm.SpacelessNode(nodelist, parser.create_text_node());
-		},
-		templatetag: function(parser, token){
-			var parts = token.contents.split();
-			if(parts.length != 2){
-				throw new Error("'templatetag' statement takes one argument");
-			}
-			var tag = parts[1];
-			var mapping = ddtm.TemplateTagNode.prototype.mapping;
-			if(!mapping[tag]){
-				var keys = [];
-				for(var key in mapping){
-					keys.push(key);
-				}
-				throw new Error("Invalid templatetag argument: '" + tag + "'. Must be one of: " + keys.join(", "));
-			}
-			return new ddtm.TemplateTagNode(tag, parser.create_text_node());
-		},
-		widthratio: function(parser, token){
-			var parts = token.contents.split();
-			if(parts.length != 4){
-				throw new Error("widthratio takes three arguments");
-			}
-			var width = +parts[3];
-			if(typeof width != "number"){
-				throw new Error("widthratio final argument must be an integer");
-			}
-			return new ddtm.WidthRatioNode(parts[1], parts[2], width, parser.create_text_node());
-		},
-		with_: function(parser, token){
-			var parts = token.split_contents();
-			if(parts.length != 4 || parts[2] != "as"){
-				throw new Error("do_width expected format as 'with value as name'");
-			}
-			var nodelist = parser.parse(["endwith"]);
-			parser.next_token();
-			return new ddtm.WithNode(parts[1], parts[3], nodelist);
-		}
-	});
-})();
-
-}
-
-if(!dojo._hasResource["dojox.dtl.ext-dojo.NodeList"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dojox.dtl.ext-dojo.NodeList"] = true;
-dojo.provide("dojox.dtl.ext-dojo.NodeList");
-
-
-dojo.extend(dojo.NodeList, {
-	dtl: function(template, context){
-		// template: dojox.dtl.__StringArgs|String
-		//		The template string or location
-		// context: dojox.dtl.__ObjectArgs|Object
-		//		The context object or location
-		var d = dojox.dtl;
-
-		var self = this;
-		var render = function(template, context){
-			var content = template.render(new d._Context(context));
-			self.forEach(function(node){
-				node.innerHTML = content;
-			});
-		}
-
-		d.text._resolveTemplateArg(template).addCallback(function(templateString){
-			template = new d.Template(templateString);
-			d.text._resolveContextArg(context).addCallback(function(context){
-				render(template, context);
-			});
-		});
-
-		return this;
-	}
-});
-
-}
-

http://git-wip-us.apache.org/repos/asf/camel/blob/9f5e32db/components/camel-web/src/main/webapp/js/dojox/dtl/Context.js
----------------------------------------------------------------------
diff --git a/components/camel-web/src/main/webapp/js/dojox/dtl/Context.js b/components/camel-web/src/main/webapp/js/dojox/dtl/Context.js
deleted file mode 100644
index 7086f55..0000000
--- a/components/camel-web/src/main/webapp/js/dojox/dtl/Context.js
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dojox.dtl.Context"]){
-dojo._hasResource["dojox.dtl.Context"]=true;
-dojo.provide("dojox.dtl.Context");
-dojo.require("dojox.dtl._base");
-dojox.dtl.Context=dojo.extend(function(_1){
-this._this={};
-dojox.dtl._Context.call(this,_1);
-},dojox.dtl._Context.prototype,{getKeys:function(){
-var _2=[];
-for(var _3 in this){
-if(this.hasOwnProperty(_3)&&_3!="_dicts"&&_3!="_this"){
-_2.push(_3);
-}
-}
-return _2;
-},extend:function(_4){
-return dojo.delegate(this,_4);
-},filter:function(_5){
-var _6=new dojox.dtl.Context();
-var _7=[];
-var i,_9;
-if(_5 instanceof dojox.dtl.Context){
-_7=_5.getKeys();
-}else{
-if(typeof _5=="object"){
-for(var _a in _5){
-_7.push(_a);
-}
-}else{
-for(i=0;_9=arguments[i];i++){
-if(typeof _9=="string"){
-_7.push(_9);
-}
-}
-}
-}
-for(i=0,_a;_a=_7[i];i++){
-_6[_a]=this[_a];
-}
-return _6;
-},setThis:function(_b){
-this._this=_b;
-},getThis:function(){
-return this._this;
-},hasKey:function(_c){
-if(typeof this[_c]!="undefined"){
-return true;
-}
-for(var i=0,_e;_e=this._dicts[i];i++){
-if(typeof _e[_c]!="undefined"){
-return true;
-}
-}
-return false;
-}});
-}

http://git-wip-us.apache.org/repos/asf/camel/blob/9f5e32db/components/camel-web/src/main/webapp/js/dojox/dtl/DomInline.js
----------------------------------------------------------------------
diff --git a/components/camel-web/src/main/webapp/js/dojox/dtl/DomInline.js b/components/camel-web/src/main/webapp/js/dojox/dtl/DomInline.js
deleted file mode 100644
index 9765ac5..0000000
--- a/components/camel-web/src/main/webapp/js/dojox/dtl/DomInline.js
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dojox.dtl.DomInline"]){
-dojo._hasResource["dojox.dtl.DomInline"]=true;
-dojo.provide("dojox.dtl.DomInline");
-dojo.require("dojox.dtl.dom");
-dojo.require("dijit._Widget");
-dojox.dtl.DomInline=dojo.extend(function(_1,_2){
-this.create(_1,_2);
-},dijit._Widget.prototype,{context:null,render:function(_3){
-this.context=_3||this.context;
-this.postMixInProperties();
-var _4=this.template.render(this.context).getRootNode();
-if(_4!=this.containerNode){
-this.containerNode.parentNode.replaceChild(_4,this.containerNode);
-this.containerNode=_4;
-}
-},declaredClass:"dojox.dtl.Inline",buildRendering:function(){
-var _5=this.domNode=document.createElement("div");
-this.containerNode=_5.appendChild(document.createElement("div"));
-var _6=this.srcNodeRef;
-if(_6.parentNode){
-_6.parentNode.replaceChild(_5,_6);
-}
-this.template=new dojox.dtl.DomTemplate(dojo.trim(_6.text),true);
-this.render();
-},postMixInProperties:function(){
-this.context=(this.context.get===dojox.dtl._Context.prototype.get)?this.context:new dojox.dtl.Context(this.context);
-}});
-}

http://git-wip-us.apache.org/repos/asf/camel/blob/9f5e32db/components/camel-web/src/main/webapp/js/dojox/dtl/HtmlInline.js
----------------------------------------------------------------------
diff --git a/components/camel-web/src/main/webapp/js/dojox/dtl/HtmlInline.js b/components/camel-web/src/main/webapp/js/dojox/dtl/HtmlInline.js
deleted file mode 100644
index 106abbb..0000000
--- a/components/camel-web/src/main/webapp/js/dojox/dtl/HtmlInline.js
+++ /dev/null
@@ -1,15 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dojox.dtl.HtmlInline"]){
-dojo._hasResource["dojox.dtl.HtmlInline"]=true;
-dojo.provide("dojox.dtl.HtmlInline");
-dojo.require("dojox.dtl.DomInline");
-dojo.deprecated("dojox.dtl.html","All packages and classes in dojox.dtl that start with Html or html have been renamed to Dom or dom");
-dojox.dtl.HtmlInline=dojox.dtl.DomInline;
-dojox.dtl.HtmlInline.prototype.declaredClass="dojox.dtl.HtmlInline";
-}